Написано на C (в проект C ++):
Возможно, это довольно неплохое преимущество.Программа AC не может использовать функции, которые были написаны на C ++.Когда вы используете __declspec (dllexport), функция экспортируется с именем C ++.Который оформлен компилятором, хитрость, позволяющая перегруженным функциям правильно связываться.Компилятор AC не применяет такого же оформления, компоновщик будет жаловаться, что не может найти функцию.
Чтобы это работало, вы должны объявить функцию с помощью декларатора extern "C"
.Сделайте так, чтобы файл .h выглядел следующим образом:
#ifdef __cplusplus
extern "C" {
#endif
#undef DLLEXPORT
#ifdef BUILDING_MYDLL
# define DLLEXPORT __declspec(dllexport)
#else
# define DLLEXPORT __declspec(dllimport)
#endif
DLLEXPORT void Foo(int arg);
// etc..
#ifdef __cplusplus
}
#endif
В вашем проекте DLL используйте Project + Properties, C / C ++, Препроцессор и добавьте BUILDING_MYDLL в настройки определений препроцессора.
Краткоеобъяснение этого макро безумия: #ifdef __cplusplus гарантирует, что все объявления DLL объявляются extern "C", когда они компилируются компилятором C ++, чтобы они соответствовали символам компилятора C.Макрос DLLEXPORT гарантирует, что функции экспортируются при сборке DLL, импортируются при связывании библиотеки импорта DLL в другом проекте.
Дополнительную диагностику можно получить с помощью утилиты dumpbin.exe, запустив ее с /опция экспорта в вашей DLL.Он показывает точные имена экспортируемых функций.Запустите его из командной строки Visual Studio.Несоответствие между именами, которые вы видите в выходных стихах сообщений об ошибках компоновщика, является верным признаком проблемы.