从C++调用(C#) .NET Core方法

10

我有两个组件:
- 运行在Ubuntu操作系统上的.Net Core应用程序。
- C++共享库(.so)

现在我希望C++组件能够调用.Net Core方法,可以通过将接口传递给C++组件,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 Core 不是很了解,但请检查是否可以使用 Marshal.GetDelegateForFunctionPointer。您可以尝试使用它来调用 C 风格的回调函数。 - Sergey.quixoticaxis.Ivanov
1个回答

2

据我所知,这是关于Mono而不是.NET Core。 - Pavel
你为什么这么认为?检查一下Makefile吧:all: clang++ -shared -fPIC -std=c++11 ./reversepinvokefromthread.cpp -o reversepinvokefromthread.so dotnet run它运行的是dotnet命令,而不是mono。 - Madars Vi
哦,那是我的错。我一直在寻找解决方案,并打开了很多标签页,所以我不小心在错误的标签页中进行了注释。 - Pavel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接