我试图在C#中使用DllImport使用本机dll。大多数方法都运行正常但我仍然在注册回调。这是样本: -
static int SetReceiver(IMessageReceiver* pReceiver);
IMessageReceiver的定义是
class IMessageReceiver
{
public:
virtual void OnMessage(unsigned char ucCommand, const void* pData, size_t size) = 0;
};
在C ++中,它是这样完成的:
class A : IMessageReceiver{ implementation of virtual function}
SetReceiver(this); // this is object of Class A.
我想在C#中实现相同目标。我所做的是创建一个接口IMessageReceiver并在课堂上实现。我正在创建该类的对象并将其作为参数传递但是获得异常。
[DllImport("Native.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetMessageReceiver(IMessageReceiver pReceiver);
SetMessageReceiver(pReceiver);
答案 0 :(得分:0)
您无法从C#代码中解决此问题。您需要提供C ++类的实现。你不能用C#制作其中一个。
解决这个问题的唯一方法是使用C ++代码。我可以看到几个明显的解决方案:
IMessageReceiver
的具体实现,通过转发到函数指针来实现OnMessage
。函数指针可以由C#代码提供。您需要将其包装在C样式函数中,以便您可以调用它。