2017-10-18 119 views
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++組件中發生某些事件時調用此「回調」。

+0

我懷疑你可以用接口來做(因爲接口意味着有一些實現它的對象)。我沒有太多的.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風格的回調。 –

回答