可以从非托管C++调用托管DLL吗?

Net*_*zen 8 .net c++ interop

是否可以从非托管C++代码调用CLR DLL(例如,一个用C#编写)?

我需要一个无法以某种方式调用它的DLL,甚至可能通过使用C++/CLI构建的一些代理C++进程?

SWe*_*eko 6

必须将CLR DLL构建为COM可见程序集.如果您控制了C#,那么这是一个简单的重建,否则,几乎不可能直接使用它.


Dav*_*ter 5

@SWeko为您提供了最佳答案,如果您可以修改原始DLL,并且您的非托管代码可以依赖于访问COM公寓(其自己::CoInitialize()的调用线程或非托管代码的调用线程具有一致的公寓).

如果不是这样,那么最好的解决方案是创建一个"托管"C++ DLL作为托管C#程序集的包装器.它叫做C++/CLI.您可以公开非托管C API操作,并在其实现中委托给托管API.它工作得很好,与调用COM API不同,没有线程关联问题.