2017-10-18 61 views
6

Tôi có 2 thành phần:
- .Net Core Application chạy trên hệ điều hành Ubuntu.
- Thư viện chia sẻ C++ (.so)Gọi (C#) Phương thức .NET Core từ C++

Bây giờ tôi muốn thành phần C++ có thể gọi .Net Core method, hoặc chuyển giao thành phần C++ sẽ sử dụng giao diện này để thực hiện phương thức gọi lại hoặc phương thức truyền thành phần C++.

cấp cao ví dụ những gì tôi đang cố gắng để đạt được:
C# thành phần:

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++ thành phần:

extern "C" { 
void SetReceiver(IReceiver * receiver) 
{ 
    receiver->OnDataAvailable(10); 
} 
} 

Về cơ bản, những gì tôi đang cố gắng làm chỉ là để vượt qua một số loại "callback" thành thành phần C++ và gọi "callback" này khi một số sự kiện xảy ra trong thành phần C++.

+0

Tôi nghi ngờ bạn có thể làm điều đó với giao diện (vì giao diện có nghĩa là có một số đối tượng thực hiện nó). Tôi không thâm nhập vào .Net Core, nhưng hãy kiểm tra xem ['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ó sẵn cho bạn. Bạn có thể thử sử dụng nó để gọi gọi lại kiểu C. –

Trả lời

1

Xem See this issue từ nhận xét Tôi đã tạo mã nơi C# gọi C và cấp cho đại biểu gọi lại. Như vậy từ C, nó gọi C#, và chuyển đối số kiểu int bổ sung. See comments here from endurox project và đính kèm c-callback.tar.gz để làm ví dụ.

Các vấn đề liên quan