我正在用 C++/CLI 包装一个纯非托管 VC++ 9 项目,以便从 .NET 应用程序中简单地使用它。我知道如何编写wrappers,并且可以从 .NET 执行非托管代码,但我无法完全理解:
非托管库是一个非常复杂的 C++ 库,并且使用了很多内联和其他功能,因此我无法将其编译到 -
/clr
标记的托管 DLL 中。我需要使用普通的 VC++ 编译器将它编译成一个单独的 DLL。如何从此非托管代码中导出符号,以便在 C++/CLI 项目中使用它?我是否将我需要的每个课程都标记为可见
extern
?是这么简单还是有一些更复杂的?如何从 C++/CLI 项目访问导出的符号?我是否只包含非托管源代码的头文件, C++ 链接器是否会从非托管 DLL 中获取实际代码?还是我必须在指向 DLL 中的类的新头文件中手动编写一组单独的“extern”类?
当我的 C++/CLI 项目创建非托管类时,非托管代码会在正常的 VC9 运行时中完美运行,还是会被迫在 .NET 中运行?导致更多兼容性问题?
C++ 项目创建了许多实例,并有自己的自定义实现的垃圾收集器,全部用纯 C++ 编写,它是一个 DirectX 声音渲染器并管理许多 DirectX 对象。这一切会正常工作还是会以任何方式影响此类 Win32 功能?