尽管关注了有关从 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),它链接到“链接器”->“输入”->“附加依赖项”设置中的 MyClass.lib。还在包装器项目中包含了 MyClass 中的 .h 文件,我可以看到 sln 可以看到 MyClass.h 文件。
// MyClassAdaptor.h
#include "MyClass.h"
namespace WrapperLayer
{
public ref class MyClassAdaptor
{
. . .
private:
MyClass* _myclass;
};
}
可能缺少什么?
几点:
- 对 DLL 使用 Dependency Walker 并检查这些符号是否确实在 DLL 中。
- 确保您使用正确的 lib 文件 - 32 位 LIB 不能用于 64 位构建。
- 确保用于构建类的 .CPP 文件实际上是非托管文件(或者 DLL 本身作为一个整体是非托管文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)