是否可以从非托管的C++代码中调用CLR DLL(例如使用C#编写的DLL)?
我需要一个非托管的DLL来调用它,也许甚至可以通过使用C++ / CLI构建的某些代理C++进程来实现?
CLR DLL必须构建为可见的COM程序集。如果你控制C#,那么重新构建很简单,否则直接使用几乎不可能。
::CoInitialize()
调用其自己的线程或非托管代码的调用线程具有一致的公寓),那么这种方法是最佳的。public delegate int Read(int target);
[DllImport("yourC++.dll")]
static extern void RegisterRead(Read x);
Read m_Read = new Read(yourClass.Read);
RegisterRead(m_Read);
GC收集委托时可能存在一些技巧,如果只是在RegisterRead
中立即使用,则具有委托的任何类都可能需要固定。
stdout
。然后你可以像调用其他exe一样调用它。虽然不是理想的解决方案,但可能会起作用。我希望你没有使用多线程,因为我不知道这是否会起作用。 - Hamish Grubijan