Это возможно, если DLL содержит файлы со связью "C" (то есть без декораций класса C ++) и если у вас есть файл заголовка и файл .def для DLL.Если у вас нет файла .def, вы можете легко его создать, загрузив инструмент обхода зависимостей из http://www.dependencywalker.com/, чтобы получить список экспортируемых символов;Вы можете сохранить выходные данные этого инструмента в виде текста, а затем извлечь имена.Затем вы создаете текстовый файл с именем mylibname.def, который содержит:
LIBRARY mylibname
EXPORTS
FirstExportedFunctionName
SecondExportedFunctionName
...
LastExpertedFunctionName
Затем вы запускаете dlltool (в MinGW \ bin):
dlltool -d mylibname.def -l mylibname.a
Это сгенерирует mylibname.a, которыйВы добавляете в свой .pro файл:
win32:LIBS += mylibname.a
Вы должны указать пути ко всем файлам или, конечно, скопировать их в нужные папки.
Вы также должны изменить заголовокфайл в вашу стороннюю программу, чтобы все символы в DLL, с которыми вам нужно связаться, были помечены для импорта с помощью Q_DECL_IMPORT.Я делаю это, объявляя все функции в файле .h как:
extern "C" {
MYLIBAPI(retType) FirstFunctionName(arg list...);
MYLIBAPI(retType) SecondFunctionName(arg list...);
...
MYLIBAPI(retType) LastFunctionName(arg list...);
}
, где MYLIBAPI равен
#define MYLIBAPI(retType) Q_DECL_IMPORT retType
Мы используем формат MYLIBAPI (retType), так как это позволяет нам настроитьзаголовочный файл для использования как в импорте, так и при создании DLL, и он также позволяет нам работать с широким спектром различных компиляторов и систем.
Сделав это, мне удалось связать QT в MinGW с DLL, которую я генерируюиспользуя VS 2005. Процедуры в VS были экспортированы как __stdcall.Вам следует обратиться к документации по dlltool для добавления подчеркиваний или других префиксов к именам в библиотеке.