在dllimport期间,Mangled成员函数名称不同

时间:2013-12-19 12:58:51

标签: dllimport mismatch

我在使用MSVC 2013在.exe项目(项目2)中导入项目的DLL(项目1)时获得了一些未解析的外部因素(它在Mingw 4.8.1中编译得很好):

main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class chakra::Message * __thiscall chakra::PublisherSubscriberChannel::GetMessageA(unsigned __int64)" (__imp_?GetMessageA@PublisherSubscriberChannel@chakra@@QAEPAVMessage@2@_K@Z) referenced in function "public: virtual void __thiscall Bar2::ProcessMessages(void)" (?ProcessMessages@Bar2@@UAEXXZ)
test_wrap.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class chakra::Message * __thiscall chakra::PublisherSubscriberChannel::GetMessageA(unsigned __int64)" (__imp_?GetMessageA@PublisherSubscriberChannel@chakra@@QAEPAVMessage@2@_K@Z)

GetMessage函数是Project 1中命名空间chakra的类PublisherSubscriberChannel的成员函数。

使用dumpbin.exe / exports检查了Project 1的.exp和.dll文件,发现该函数要导出为?GetMessage @PublisherSubscriberChannel @chakra @@ QAEPAVMessage @ 2 @ _K @ Z 而在导入过程中,它会根据上述错误寻找?GetMessageA @ PublisherSubscriberChannel @chakra @@ QAEPAVMessage @ 2 @ _K @ Z

只有在#include“Ogre.h”或test_wrap.cxx文件中的任何其他Ogre头文件(这是一个SWIG生成的文件)时才会发生。

有没有人知道为什么功能名称与额外的'A'不匹配?

0 个答案:

没有答案