C++ искажает имена в dll и при использовании этого dll проекта не совпадает

Я пытаюсь использовать некоторые библиотеки 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 имя в проекте

?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 имя в проекте

?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 в объявление функции также не помогло.

0 ответов

Другие вопросы по тегам