Я пытаюсь использовать некоторые библиотеки lib и dll в моем проекте Visual C ++ (2015, OS — Windows8x64) MFC Win32. Эта библиотека старая, с 2005 года. И в моем проекте я получаю неразрешенные внешние ошибки символов при вызове некоторых функций dll. Таким образом, я сделал небольшую мусорную корзину на упомянутой dll, и оказалось, что имена 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.
Mangle name в проекте
?PatientName@CDcmPatientModule@@QAEAAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@XZ
Mangle name в dll
?PatientName@CDcmPatientIdentificationModule@@QAEAAVCString@@XZ
demangle name в проекте (команда undname):
public: class ATL:CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT > > & __thiscall CDcmPatientIdentificatioModule::PatientName(void)
demangle name в dll это:
public: class CString & __thiscall CDcmPatientIdentificatioModule::PatientName(void)
2.
Mangle name в проекте
?Export@CDcmIOD@@QAEXABV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
Mangle name в dll
?Export@CDcmAttributeSet@@QAEXABVCString@@@Z
Разобрать имя в проекте
public void __thiscall CDcmIOD::Export(class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char>>>const &)
И разобрать имя в DLL
public: void __thiscall CDcmAttributeSet::Export(class CString const &)
Итак, как вы можете видеть разницу между «CString», как сделать эти имена совпадают ??
Добавлен #define USE_ADS_SHARED_LIB — ничего не изменилось
Добавление __stdcall в объявление функции также не помогло.
Задача ещё не решена.
Других решений пока нет …