尽管链接到带有导​​出符号的.lib文件,但链接错误从托管C ++链接到非托管C ++

时间:2012-07-17 22:23:07

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

尽管有关使用和链接来自C ++ / CLI包装器DLL的非托管C ++代码的各种帖子,但我无法解决这些链接问题。

1>MyClassAdapter.obj : error LNK2028: unresolved token (0A00000A) "public: __thiscall MyClass::~MyClass(void)" (??1MyClass@@$$FQAE@XZ) referenced in function "public: void * __thiscall MyClass::`scalar deleting destructor'(unsigned int)" (??_GMyClass@@$$FQAEPAXI@Z)
1>MyClassAdapter.obj : error LNK2028: unresolved token (0A00000B) "public: __thiscall MyClass::MyClass(void)" (??0MyClass@@$$FQAE@XZ) referenced in function "public: __clrcall WrapperLayer::MyClassAdaptor::MyClassAdaptor(void)" (??0MyClassAdaptor@WrapperLayer@@$$FQ$AAM@XZ)
1>MyClassAdapter.obj : error LNK2019: unresolved external symbol "public: __thiscall MyClass::MyClass(void)" (??0MyClass@@$$FQAE@XZ) referenced in function "public: __clrcall WrapperLayer::MyClassAdaptor::MyClassAdaptor(void)" (??0MyClassAdaptor@WrapperLayer@@$$FQ$AAM@XZ)
1>MyClassAdapter.obj : error LNK2019: unresolved external symbol "public: __thiscall MyClass::~MyClass(void)" (??1MyClass@@$$FQAE@XZ) referenced in function "public: void * __thiscall MyClass::`scalar deleting destructor'(unsigned int)" (??_GMyClass@@$$FQAEPAXI@Z)

我有一个带有简单类的非托管本机C ++ dll,相应地导出/导入符号

// MyClass.h
#ifdef _EXPORTING
   #define DLL_PUBLIC __declspec(dllexport)
#else
   #define DLL_PUBLIC __declspec(dllimport)
#endif

class DLL_PUBLIC MyClass { . . . };

我可以看到构建后生成.dll和.lib链接器文件。

然后我有托管的C ++ / CLI包装器项目(也是一个dll),它链接到Linker-> Input-> Additional Dependencies设置中的MyClass.lib。还包含了包装器项目中MyClass的.h文件,我可以看到sln可以看到MyClass.h文件。

// MyClassAdaptor.h

#include "MyClass.h"

namespace WrapperLayer
{
    public ref class MyClassAdaptor 
    { 
      . . . 
    private:
        MyClass* _myclass;  
    }; 
}

可能会遗漏什么?

1 个答案:

答案 0 :(得分:1)

几点:

  • 对DLL使用Dependency Walker并检查这些符号是否实际在DLL中。
  • 确保使用正确的lib文件 - 32位LIB不能用于64位版本。
  • 确保用于构建类的.CPP文件实际上是非托管的(或者DLL本身,作为一个整体,是不受管理的)。