2011-03-28 46 views
3

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

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

回答

5

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

你当然可以在任何地方包含一个头文件,并且可以从任何地方添加一个链接器输入,因此它们在技术上不必处于相同的.sln中,但是如果它们是Visual Studio 。

+2

如果本地项目设置为构建静态.lib而不是DLL,它也会有所帮助。否则,您可能会很容易遇到问题,如从一个CRT堆分配并尝试释放另一个CRT堆。有时候,值得激活“链接库源”选项,因为链接到静态库不会在不需要的对象中运行全局构造函数。 “它工作正常(如果你很小心”,但比p/invoke要容易得多) – 2011-03-28 23:08:30

+0

这很好,我的本地代码是一个dll而不是静态库 – John 2011-03-29 14:05:18

+0

你可以让VS让你成为一个“便利库“,你可以链接到调用项目 – 2011-03-29 14:06:27