在C ++ / CLI中从非托管调用托管代码时出错

时间:2011-05-06 09:18:31

标签: visual-c++ c++-cli interop unmanaged managed

我正在为程序编写“驱动程序”,驱动程序与网络上的某些设备进行通信。我已经有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()时会出现访问冲突异常,甚至不在它

我是否遗漏了一些非常明显的事情,我应该做一些互操作?网络中的大多数信息只是告诉它应该“正常工作”

1 个答案:

答案 0 :(得分:1)

看看这是否有帮助:

根据How can i use a C# dll in a Win32 C++ project?

“在本机C ++代码中定义一个抽象接口类,然后在托管C ++ DLL中创建一个具体的子类。在方法实现中调用C#对象。

最后,导出一个工厂函数,它将实例化实现类并返回一个本机代码可以使用的基类指针。“