Изменение соглашения о вызовах с cdecl на stdcall - PullRequest
0 голосов
/ 09 августа 2010

В VS2005 я использовал соглашение о вызовах _cdecl, и проект компилируется без ошибок компоновщика.После изменения соглашения о вызовах на _stdcall при переносе проекта на VS2008 я получаю следующую ошибку:

ошибка LNK2001: неразрешенный внешний символ __imp__GCBOpen@8.

Параметры конфигурации> C \ C ++>Genral> Поддержка общеязыковой среды выполнения установлена ​​на Нет поддержки общеязыковой среды выполнения

Мне нужна помощь в отношении любых настроек проекта или изменений кода, которые необходимо выполнить для решения проблемы.Любая помощь приветствуется.

1 Ответ

2 голосов
/ 10 августа 2010

Похоже, GCBOpen() скомпилировано __cdecl, но в объявлении этого явно не указано. (Вот почему он связал OK, когда по умолчанию было __cdecl, но разрывается, когда вы его изменили.) Как правило, для объявлений функций во внешних библиотеках рекомендуется указывать соглашение о вызовах, чтобы избежать проблем, подобных той, которую вы встретили.

Где-то у вас должно быть что-то вроде:

__declspec(dllimport)
extern int GCBOpen(int, int);

что было бы лучше как:

#define CALLCONV __cdecl
__declspec(dllimport)
extern int CALLCONV GCBOpen(int, int);
...