我正在尝试在我的Visual C ++(2015,OS - Windows8x64)MFC Win32项目中使用一些lib和dll。这个lib从2005年开始变老。在我的项目中,我在一些dll的函数调用中收到了未解决的外部符号错误。所以我在引用的dll上做了一个小的dumpbin,结果发现mangle名称不匹配。 例如这些功能。在* .h文件中:
1
class AFX_EXT_CLASS CDcmPatientModule : public CDcmModule
{
public:
DECLARE_SERIAL( CDcmPatientModule );
public:
CString& PatientName();
......
}
和
2
class AFX_EXT_CLASS CDcmIOD : public CObject
{
friend CDcmModule;
public:
DECLARE_SERIAL( CDcmIOD );
void Export( const CString& pathname );
.....
};
1。 项目中的裂缝名称
?PatientName@CDcmPatientModule@@QAEAAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@XZ
dll中的裂缝名称
?PatientName@CDcmPatientIdentificationModule@@QAEAAVCString@@XZ
项目中的demangle名称(undname命令)是:
public: class ATL:CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT > > & __thiscall CDcmPatientIdentificatioModule::PatientName(void)
dll中的demangle名称是:
public: class CString & __thiscall CDcmPatientIdentificatioModule::PatientName(void)
2。 项目中的裂缝名称
?Export@CDcmIOD@@QAEXABV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
dll中的裂缝名称
?Export@CDcmAttributeSet@@QAEXABVCString@@@Z
项目中的demangle名称
public void __thiscall CDcmIOD::Export(class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char>>>const &)
DLL中的demangle名称
public: void __thiscall CDcmAttributeSet::Export(class CString const &)
所以你可以看到“CString”之间的区别 如何使这些名字匹配?
添加了#define USE_ADS_SHARED_LIB - 没有任何改变 在函数声明中添加__stdcall也没有帮助。