6
我有兩個組件:
- 在Ubuntu OS上運行的.Net核心應用程序。
- C++共享庫(.so)從C++調用(C#).NET Core方法
現在我希望C++組件能夠調用.Net Core方法,或者將接口傳遞給C++組件,它將使用此接口以回調方法實現或傳遞方法作爲參數到C++組件。
高級例子就是我想實現:
C#組件:
public interface IDevice
{
void OnDataAvailable(string data);
}
public class Device: IDevice
{
[DllImport("sampleCPPLibrary.so")]
private static extern int SetReceiver(IDevice receiver);
public void OnDataAvailable(string data)
{
Console.WriteLine(data);
}
public void Initialize()
{
SetReceiver(IDevice(this))
}
}
C++組件:
extern "C" {
void SetReceiver(IReceiver * receiver)
{
receiver->OnDataAvailable(10);
}
}
基本上,我試圖做的就是通過某種「回調」C++組件,並在C++組件中發生某些事件時調用此「回調」。
我懷疑你可以用接口來做(因爲接口意味着有一些實現它的對象)。我沒有太多的.NET核心,但檢查['Marshal.GetDelegateForFunctionPointer'](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getdelegateforfunctionpointer?view = netframework-4.7.1#System_Runtime_InteropServices_Marshal_GetDelegateForFunctionPointer_System_IntPtr_System_Type_)可供您使用。您可以嘗試使用它來調用C風格的回調。 –