从CLI C ++项目引用非托管C ++项目

时间:2012-09-19 07:39:49

标签: c++ visual-studio-2010 visual-studio compilation

我正在尝试创建一个CLI DLL,以便在我的非托管C ++可执行项目和另一个托管项目之间进行桥接,所有这些都在一个Visual Studio解决方案中完成。

我遇到的问题是早些时候:我无法在新的CLI项目中链接引用非托管C ++项目。我已经包含了所需的.h文件,并在CLI项目中添加了对非托管项目的引用。编译成功,但我收到了以前没见过的链接错误:

  

错误2
  错误LNK2028:未解析的令牌(0A000088)“public:__ cdecl ...

我在项目属性中添加了一个引用,并包含了.h文件。

由于

1 个答案:

答案 0 :(得分:1)

似乎链接器缺少其他项目的一些中间信息。我真的不记得'引用'原生项目是否确实自动设置链接阶段..我实际上发现它很奇怪你说“引用”..对我来说,“引用”这个词有点局限于.Net的世界因为VS中的“添加引用”而导致程序集,这使得没有人关心包含/库以及哪些IIRC由于显而易见的原因而无法用于本机dll。如果您的意思是手动配置了链接器选项,请原谅我:)

如果没有 - 请解释你是如何引用本机模块的。

无论哪种方式,如果“引用”之前工作,文件名可能会失去同步,如果你重命名项目,可能文件时间戳有点关闭,VS没有注意到新版本..简单清除&重建有时会神奇地帮助。如果没有,您可以尝试手动删除Debug / Release / Bin / Obj文件夹并再次尝试重建。

要尝试诊断,第一步是查看链接器的输入内容:在C ++ / CLI项目的项目属性页中,检查Linker-> CommandLine并查看名称是否类似于“ myOtherNativeCppProjectName.lib“在那里可见。如果不是 - 这就是问题,只需将它添加到previos链接器页面上的链接器选项中,或者重新进行引用添加,然后清理,重建并查看会发生什么。

要说些什么,你必须发布整个错误信息 - 这个被截断在函数名称,因此很难判断它是你的函数,还是一些遗失库模块。由于编译阶段成功并且问题在链接 - 您是否100%确定您已实现该功能?我的意思是,正确的.h肯定是提供给C ++ / CLI项目的,但是正确的.cpp文件是否与本机中包含的.h文件相匹配?忘记添加一个文件也很常见。或者忘记实例化模板..或者在.H和.CPP之间输入错误的类/函数名称。