зачем загружать модуль во время выполнения? - PullRequest
2 голосов
/ 15 декабря 2011

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

HMODULE hmodMscoree = LoadLibraryEx(L"mscoree.dll", NULL, 0);
typedef HRESULT (STDAPICALLTYPE *GETCORVERSION)(LPWSTR szBuffer, DWORD cchBuffer, DWORD* dwLength);
 GETCORVERSION pfnGETCORVERSION = (GETCORVERSION)GetProcAddress(hmodMscoree, "GetCORVersion");

Почему он загружает mscoree.dll во время выполнения?

С наилучшими пожеланиями,

Ответы [ 2 ]

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

Одним из преимуществ является то, что если вы загружаете DLL динамически , то наличие DLL (например, mscoree.dll) и наличие функции в DLL (например, GetCORVersion в mscoree.dll)будет проверяться только тогда, когда приложение попытается загрузить DLL и вызвать функцию соответственно.Если DLL отсутствует или одна из ее функций отсутствует из-за того, что у вас есть только более старая версия, проблем не будет, если приложение не использует эту функцию.Напротив, если библиотека DLL статически связана и отсутствует, приложение просто не запустится (вы получите сообщение об ошибке).

Пример: У нас есть сложное программное обеспечение для промышленных измерений, которое динамически связывает wpcap.dll .В случаях, когда измерение не включает анализ пакетов, нам не нужно устанавливать WinPcap.

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

Одна из причин загрузки модуля и использования GetProcAddress заключается в том, что DLL может отсутствовать на компьютере. Таким образом, приложение может работать, даже если DLL не существует. Конечно, вам необходимо убедиться, что и LoadLibrary, и GetProcAddress были успешными.

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