Явное связывание
Обновлен: Ноябрь 2007
При явном связывании приложения должны выполнять вызов функции для явной загрузки библиотеки DLL во время выполнения. Чтобы выполнить явное связывание с библиотекой DLL, приложение должно выполнить следующие действия.
Вызвать функцию LoadLibrary (или аналогичную функцию) для загрузки библиотеки DLL и получения дескриптора модуля.
Вызвать функцию GetProcAddress, чтобы получить указатель для каждой экспортируемой функции, вызываемой приложением. Поскольку приложения вызывают функции библиотек DLL с помощью указателя, компилятор не создает внешних ссылок, поэтому нет необходимости выполнять связывание с библиотекой импорта.
Вызвать функцию FreeLibrary по завершении всех действий с библиотекой DLL.
Пример.
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
Выполняемые задачи
Дополнительные сведения
Функции LoadLibrary и AfxLoadLibrary
Функция GetProcAddress
Функции FreeLibrary и AfxFreeLibrary