dll和使用此dll项目中的C ++ mangle名称不匹配

时间:2016-10-03 08:59:01

标签: c++ dll libc++ dumpbin demangler

我正在尝试在我的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也没有帮助。

0 个答案:

没有答案