Ошибка связи с искажением имени несовпадение declspec в приложении Visual C ++ 2008 во время ссылки

У меня есть DLL и основной исполняемый файл, и основной исполняемый файл больше не связывает символы из библиотеки импорта DLL, а declspec в файле DLL .map не совпадает, как и искаженное имя C ++. Я не могу понять, почему, хотя я делал обычные вещи, которые вы делаете, когда вы не можете связать материал C ++.

Мои заголовки определяют что-то вроде этого:

#ifdef MY_MODULE
#undef CLASS_EXPORT
#define CLASS_EXPORT __declspec(dllexport)
#else
#undef CLASS_EXPORT
#define CLASS_EXPORT __declspec(dllimport)
#endif

Кажется, мои классы экспортируются правильно, но файл .map указывает на странную вещь, которую я считаю неправильной:

    6    ?CreateDataArea@@YAKPAGPBD111PAVCObject@@K@Z (unsigned long __cdecl
CreateDataArea(unsigned short *,char const *,char const *,char const *,
char const *,class CObject *,unsigned long))

Искаженное имя выше имеет @@YAK...

Ошибка ссылки:

1>Device.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) public: unsigned long __thiscall
CCommonMemory::CreateDataArea(unsigned short *,char const *,char const *,
char const *,char const *,class CObject *,unsigned long)"(__imp_?CreateDataArea@CCommonMemory@@QAEKPAGPBD111PAVCObject@@K@Z) referenced
in function "public: __thiscall CDevice::CDevice(void)" (??0CDevice@@QAE@XZ)

Так почему искалеченное имя @@QAEK отличается, когда у меня настроен макрос declspec и почему файл .map показывает __thiscall соглашение о вызовах, когда макрос определяет __declspec(dllexport)?

Точно так же, как я забыл сделать макрос __declspec (dllimport / dllexport), но я сделал это.

Я попытался поместить CLASS_EXPORT в КАЖДЫЙ экспортированный метод, и я попытался сделать это в первой строке объявления класса без изменений.

0

Решение

Похоже, определение для CreateDataArea() не ограничен классом (т. е. вы остановились CCommonMemory:: при определении функции).

Если вы посмотрите на то, что попадает в файл карты, вы увидите, что это __cdecl функция без имени класса «присоединен».

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]