我有一个 DLL 和一个主可执行文件,主可执行文件不再从 DLL 的导入库中链接符号,并且 DLL .map 文件中的 declspec 不匹配,损坏的 C++ 名称也不匹配。我不明白为什么,尽管我已经完成了您在无法链接 C++ 内容时所做的通常事情。
我的标题定义如下:
#ifdef MY_MODULE
#undef CLASS_EXPORT
#define CLASS_EXPORT __declspec(dllexport)
#else
#undef CLASS_EXPORT
#define CLASS_EXPORT __declspec(dllimport)
#endif
我的课程似乎可以正确导出,但 .map 文件表明我认为有一些奇怪的事情是错误的:
6 ?CreateDataArea@@YAKPAGPBD111PAVCObject@@K@Z (unsigned long __cdecl
CreateDataArea(unsigned short *,char const *,char const *,char const *,
char const *,class CObject *,unsigned long))
上面的损坏名称有@@YAK...
链接错误是:
1>Device.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) public: unsigned long __thiscall
CCommonMemory::CreateDataArea(unsigned short *,char const *,char const *,
char const *,char const *,class CObject *,unsigned long)"
(__imp_?CreateDataArea@CCommonMemory@@QAEKPAGPBD111PAVCObject@@K@Z) referenced
in function "public: __thiscall CDevice::CDevice(void)" (??0CDevice@@QAE@XZ)
那么,@@QAEK
当我配置了 declspec 宏时,为什么损坏的名称会有所不同,为什么 .map 文件 __thiscall
在宏定义时显示调用约定__declspec(dllexport)
?
就像我忘了做 __declspec(dllimport/dllexport) 宏一样,但我做到了。
我尝试将 CLASS_EXPORT 放在导出的每个方法上,并在类声明的第一行尝试了它,没有任何变化。