Вам определенно нужен заголовочный файл.
Если проблема не устранена, это означает, что определения в заголовке не определяют соглашение о вызовах.
Общий подход к обработке ошибок linke:
Дамп функций, используемых вашим приложением
Корзина / символы
Дамп библиотеки и и длл
свалка / экспорт
свалка / экспорт
Для статических библиотек
dumpbin /symbols <libraryFileName.lib>
Найдите имена функций в 2 дампах (3 для библиотеки dll + import)
и убедитесь, что они идентичны.
Любое несоответствие, которое вы обнаружите, будет указывать на вашу проблему
Измените ваш вызов так, чтобы он получал тот же результат, что и экспортированный материал
Интерпретация (некоторые из) результатов:
Функции C:
_functionName = C function, __cdecl calling convention
_functionName@12 = C function, __stdcall calling convention
@functionName@12 = C function, __fastcall calling convention
(конечно, число не обязательно должно быть 12)
C ++ функции
Они похожи? FunctionName @
Это украшенное имя.
Но на свалке тоже есть неокрашенный.
Примеры:
?functionName@@$$J0YMHHPADPAUKeyVal@@@Z
(extern "C" int __clrcall functionName(int,char *,struct KeyVal *))
=> you have all the info, including the fact that this is compiled to
managed code (__clrcall)
?functionName@@YAHHPADPAUKeyVal@@@Z
(int __cdecl functionName(int,char *,struct KeyVal *))
=> normal C++ function
?functionName@className@@QAEHHPADPAUKeyVal@@@Z
(public: int __thiscall className::functionName(int,char *,struct KeyVal
*))
=> member function (because of __thiscall) of the class className
и т. Д.
Подсказка: я рекомендую дамп в файл, потому что результирующие дампы могут быть большими
dumpbin / exports fileToDump.lib> dumpResult.txt
Бонусный совет: иногда на одной свалке вы увидите короткую без знака и
в другом wchar_t
Это означает, что компиляция не была сделана с теми же настройками
для wchar_t (нативный тип или нет)