Пользователь столкнулся с проблемой при попытке использовать функцию, созданную в Delphi, в проекте Visual Studio. Функция CheckResult была экспортирована из DLL, скомпилированной в Delphi, но при линковке в C++ проекте возникала ошибка error LINK2019: unresolved external symbol __imp_CheckResult referenced in function __*__. Проблема заключалась в отсутствии файла import library (.lib), который необходим для линковки DLL в Visual Studio.
Решение проблемы
Для решения проблемы необходимо создать import library (.lib) для DLL. Это можно сделать двумя способами:
Использовать LoadLibrary и GetProcAddress для динамической загрузки функций из DLL.
Создать файл import library (.lib), который будет содержать необходимую информацию для линковки.
Создание import library (.lib)
Для создания .lib файла можно использовать подход с созданием "поддельного" проекта в Visual Studio, который экспортирует те же функции, что и исходная Delphi DLL. Это делается с помощью файла .def, чтобы избежать добавления имен функций в декораторы, что необходимо для соглашения о вызовах stdcall. Затем, используя утилиту LIB из Visual Studio, можно сгенерировать .lib файл для "поддельного" проекта, который будет содержать информацию о необходимых функциями DLL.
Инструкция по созданию .lib файла:
Создайте файл .def с описанием экспортируемых функций:
EXPORTS
CheckResult
Используйте утилиту LIB из Visual Studio для создания .lib файла:
Скопируйте полученные файлы .exp и .lib в директорию вашего проекта Visual C++.
В коде C++ объявите функцию, используя директиву extern "C" и __declspec(dllimport):
extern "C" __declspec(dllimport) int __stdcall CheckResult();
Добавьте созданный .lib файл в список зависимостей вашего проекта в Visual Studio.
Важные замечания:
Если функция в Delphi используется с соглашением о вызовах stdcall, то в файле .def необходимо указать декоратор @0:
EXPORTS
CheckResult@0
Убедитесь, что в коде C++ также используется соглашение stdcall:
extern "C" __declspec(dllimport) int __stdcall CheckResult();
Следуя этим шагам, вы сможете успешно линковать функцию из Delphi DLL в проекте Visual Studio, избегая ошибки error LINK2019.
Пользователю необходимо создать файл import library (.lib) для DLL, скомпилированной в Delphi, чтобы обеспечить успешную линковку и использование экспортированной функции в проекте Visual Studio.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS