我正在为程序编写“驱动程序”,驱动程序与网络上的某些设备进行通信。我已经有C#软件使用这些设备,所以计划是重用代码 所以驱动程序dll实际上是程序和已经可用的程序集之间的互操作,它是用C ++ / CLI编写的。程序调用接口中描述的方法,interop dll调用C#代码,这就是我所看到的。
我使用#pragma unmanaged
DeviceSearch::DeviceSearch(IDeviceSearchHandler* handler):m_handler(handler)
{
ManagedWrapper mw;
mw.Init();
}
ManagedWrapper在托管代码中实现,显然是
void ManagedWrapper::Init()
{
//some code
}
然而,问题在这里上升。如果Init()为空或调用C ++中定义的方法/类,则它正常工作。但是,如果我尝试调用C#代码(使用#using引用,其中Facade.dll是执行某些功能的C#dll),则在调用mw.Init()时会出现访问冲突异常,甚至不在它
我是否遗漏了一些非常明显的事情,我应该做一些互操作?网络中的大多数信息只是告诉它应该“正常工作”
答案 0 :(得分:1)
看看这是否有帮助:
根据How can i use a C# dll in a Win32 C++ project?
“在本机C ++代码中定义一个抽象接口类,然后在托管C ++ DLL中创建一个具体的子类。在方法实现中调用C#对象。
最后,导出一个工厂函数,它将实例化实现类并返回一个本机代码可以使用的基类指针。“