О динамически подключаемой библиотеке в C ++ - PullRequest
0 голосов
/ 22 декабря 2011

Этот вопрос касается динамического связывания библиотек и использования динамического связывания библиотек в приложении.

Например, мы разрабатываем приложение с использованием C ++ в среде Visual studio.

Здесь для включениязаголовочные файлы, которые мы указываем в дополнительных каталогах включения и в дополнительных зависимостях: Mylibrary.lib в каталогах дополнительных библиотек: мы указываем путь к библиотекам

И в Windows у нас также есть API "LoadLibrary", который используется для загрузки динамически связанныхibrary.

Мой вопрос:

  1. , когда мы включаем dll в библиотеки дополнительных зависимостей, почему мы должны использовать «LoadLibrary» API?
  2. Когда мы должны использовать «LoadLibrary»API?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

LoadLibrary позволяет продолжить выполнение программы, если dll отсутствует на работающей машине. Возвращает состояние ошибки, которое можно проверить и продолжить выполнение.

Кроме того, связывание позволяет вам делать такие вещи, как использование классов из другого двоичного файла и других. LoadLibrary только позволяет вам найти функции через GetProcAddress.

0 голосов
/ 24 января 2017

Вы спросили, что можете включить dll в библиотеки дополнительных зависимостей, а затем зачем использовать loadlibrary.

Сначала давайте проясним понимание:

При статическом линковании требуется добавить программистафайл .lib в зависимость от дополнительной библиотеки, которая связана с программой вызывающей программы во время компиляции,

Однако Dll загружаются динамически, поэтому вам не нужно добавлять библиотеки DLL в зависимость дополнительной библиотеки, когда вы используете LoadLibrary, т.е.;если вы явно связываете Dll, вам не нужно указывать путь к dll в разделе Дополнительные зависимости библиотеки.

Обратите внимание: используя LoadLibrary, вы сможете получить дескриптор Dll, который можно вызывать экспортированной функцией, используяGetProcAddress.

см .: https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx

0 голосов
/ 22 декабря 2011

Представьте, что у вас есть программное обеспечение, которое, например, необходимо в определенное время для преобразования сетевого адреса в сети в строки.В Windows Vista или более поздней версии вы можете использовать функцию «InetNtop», которая также может работать с ipv6, но если вы подключитесь напрямую к DLL, ваша программа не будет работать на более низких ОС (например, Windows XP).Таким образом, наилучшим решением, вероятно, было бы создание двух DLL, которые использовали бы «InetNtop», а другую, например, «inet_ntoa».Тогда ваша «основная» программа будет выполнять во время выполнения LoadLibrary из «InetNtop DLL» или «inet_ntoa DLL», в зависимости от ОС, которую он установил.

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