Как включить файл DLL, который был упакован в новую DLL? - PullRequest
2 голосов
/ 25 августа 2010

В моем приложении я должен явно указать ссылку на dll. Приложение находится в QT с компилятором gcc.

DLL-библиотека, на которую должно ссылаться приложение, является оболочкой для другой старой библиотеки DLL. Цель состоит в том, чтобы приспособить старую DLL к новому интерфейсу.

Я использую неявные ссылки при компиляции новой библиотеки DLL. Новая dll скомпилирована с msvc 2008. Причина в том, что старая dll имеет функции класса c ++, которые не могут быть распознаны gcc. Новый интерфейс использует функции c.

Итак, общая картина такова, что когда я запускаю свое приложение, я связываю новую dll, а новая dll зависит от старой dll. Все работает нормально, за исключением того, что я должен положить старый DLL в ту же папку, что и EXE-файл или ту же папку, что и файл .pro.

Я пытался добавить старую библиотеку в файл qt .pro приложения, но не сработал.

Можно ли как-нибудь переместить каталог старого файла dll?

Чтобы сформулировать более четко, если старая dll и приложение скомпилированы одним и тем же компилятором, я мог бы включить путь к старой dll и lib в файл .pro и поместить его в любое место.

Однако, теперь только новая dll распознает старые функции dll, поэтому я больше не мог этого делать. Интересно, есть ли способ изменить путь, который ищет исполняемый файл во время работы. Теперь он ищет и папку exe, и свою родительскую папку.

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Я пытался изменить порядок поиска в dll с помощью SetDllDirectory , который упоминается по ссылке в ответе Стивена. Однако это только функция msvc. (Я не уверен, но я включил файл mingw winbase.h, и он все еще не распознает его.)

Итак, я попытался изменить переменную PATH, используя putenv, и она работает.

0 голосов
/ 26 августа 2010

Операционная система Windows ищет DLL определенным образом, может помочь следующая ссылка: Поиск в библиотеке динамических ссылок

Если вы хотите сохранить dll в другой папке, то добавление папки lib в переменную PATH будет работать, но при развертывании пакета вы должны будете убедиться, что dll на целевой машине можно найти с помощью порядок поиска в библиотеке, указанный в ссылке.

...