Вызов статической функции lib, встроенной в DLL - PullRequest
1 голос
/ 14 октября 2011

Допустим, следующая архитектура:

  • Статическая библиотека используется / связана внутри DLL
  • DLL загружается (неявно или явно) исполняемым файлом

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

Ответы [ 2 ]

4 голосов
/ 14 октября 2011

Учитывая ваши ограничения, ответ - нет.

Причина в том, что исполняемый файл не имеет никакой видимости в зависимости или "вызовы" DLL.Что касается исполняемого файла, он просто знает о самой DLL: во время компоновки исполняемый файл знает только о тех экспортах, которые он потребляет из DLL.Он собирается выполнить LoadLibrary () для библиотеки DLL (которая завершится ошибкой, если зависимости указанной библиотеки DLL не разрешимы), а затем вызвать экспорт этой библиотеки DLL.

Если вы не можете статически связываться с используемой библиотекойПо какой-то причине в DLL другой подход заключает в себе вызовы к указанной статической библиотеке.Это может быть проблемой из-за множества звонков, но есть автоматизированные инструменты, которые другие создали, чтобы помочь.В частности, я использовал это прежде, чтобы создать оболочку для DLL, которая экспортировала сотни функций, когда я хотел перехватить конкретную: http://www.codeproject.com/KB/DLL/CreateYourProxyDLLs.aspx

0 голосов
/ 16 июля 2014

Ответ может быть простым: Да.

Единственное требование:

В вашем статическом файле LIB вы должны определить __declspec(dllexport) для всего, что вы хотите экспортировать.Когда вы затем включите этот LIB-файл в ваш проект DLL, все функции, которые вы объявили как __declspec(dllexport), будут автоматически экспортироваться DLL и могут быть доступны из вашего Exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...