Использовать функции в DLL без загрузки? - PullRequest
0 голосов
/ 18 марта 2011

Я смотрю на некоторый код на c ++ / c, проект ovaldi с открытым исходным кодом.Я вижу, что они включают pcre.dll в дистрибутив и делают вызовы функций в этой библиотеке в коде;но они никогда не загружают dll;они просто включают заголовок pcre.h и, похоже, имеют доступ к функциям.Они действительно просто строят со статической библиотекой и распространяют pcre.dll случайно или есть способ сделать это?

Ответы [ 4 ]

8 голосов
/ 18 марта 2011

Что вы имеете в виду, они не загружают DLL? Не звонит LoadLibrary? Вероятно, используется таблица импорта, загрузчик ОС автоматически загрузит DLL.

4 голосов
/ 18 марта 2011

Они действительно загружают dll, но просто неявно. Видите ли, вы можете создать файл .lib, который отвечает за загрузку DLL и перенаправление вызовов, ссылку на lib, включает заголовок и все. В Visual Studio это делается автоматически, когда вы устанавливаете зависимость для проекта dll

2 голосов
/ 18 марта 2011

Само приложение может быть построено с указателями компоновщика для автоматического поиска и загрузки DLL без необходимости делать это явно.Истинная динамическая загрузка библиотек DLL обычно требуется только тогда, когда возникает вопрос, какую версию библиотеки DLL загружать.

0 голосов
/ 18 марта 2011

Вы можете загружать динамические библиотеки при запуске, но затем вам необходимо перезапустить программу, чтобы перезагрузить библиотеку, если библиотека изменится.Загрузка библиотеки во время выполнения с помощью LoadLibrary или dlopen (unix) позволяет обновлять динамическую библиотеку во время работы процесса.Это хорошо для долго выполняющихся процессов, таких как сервер, но также требует дополнительных затрат для перезагрузки библиотеки.

...