将本机c ++类导入CLI项目

Joh*_*ohn 3 mixed-mode c++-cli managed wrapper visual-c++

我正在创建一个CLI项目来包装现有的本机c ++项目(同一个解决方案文件中的两个独立项目).我想在托管类中包含一个指向本机类的指针作为成员.从我在线阅读的文档中,如果托管代码和非托管代码在同一个项目中,则可以完成此操作.如果本机代码和托管代码位于不同的项目中,那么唯一的选择是在两个项目之间使用dllimport和dllexport属性,并将本机代码类函数导出为静态函数.

这些是我唯一的选择,还是可以在两个单独的项目之间导入和导出整个本机类?我问,因为这决定了我如何设计我的托管包装器.提前致谢.

Kat*_*ory 5

那么"指针"这个词就把我扔了一分钟.你的意思是你想在没有P/Invoke的情况下使用C++/CLI代码中的一些本机代码?当然.只需包含标题,链接到lib.如果他们都是本地人,你究竟会怎么做.这些天它被称为C++ Interop - 我更喜欢旧名称(It Just Works Interop).

你当然可以从任何地方包含一个标题,并从任何地方添加一个链接器输入,所以它们在技术上不必在同一个.sln中,但是Visual Studio会让你的生活变得更容易.

  • 如果将本机项目设置为构建静态.lib而不是DLL,它也会有所帮助.否则,您很容易遇到问题,例如从一个CRT堆分配并尝试与另一个CRT堆释放.有时值得激活"链接库源"选项,因为链接到静态库不会在不需要的对象中运行全局构造函数."它只是工作(如果你小心",但比p/invoke容易得多. (2认同)