Функция GetProcAddress извлекает адрес экспортируемой функции или переменной из заданной динамически подключаемой библиотеки (DLL).
Синтаксис
FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName ); |
Параметры
hModule
[in] Дескриптор модуля DLL, который содержит функцию или переменную. Функция LoadLibrary или GetModuleHandle возвращает этот дескриптор.lpProcName
[in] Указатель на символьную строку с нулем в конце, которая определяет функцию или имя переменной, или порядковое значение функции. Если этот параметр - порядковое значение, оно должно находиться в младшем слове; старшее слово - должно быть нуль.Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - адрес экспортируемой функции или переменной.
Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Замечания
Проверка правописания и регистра имени функции, на которое указывает параметр lpProcName должны быть идентичны такому же в операторе EXPORTS определения модуля исходного (.def) файла DLL. Имена экспортируемых функций могут отличаться от имен, которые Вы используете при вызове этих функций в вашем коде. Это различие скрыто макроопределением, используемым в заголовочных файлах SDK. Дополнительную информацию, см. в статье Соглашения для прототипов функций.
Параметр lpProcName может идентифицировать функцию DLL, определяя порядковое значение, связанное с функцией в операторе EXPORTS. GetProcAddress проверяет, что указанный порядковый номер находится в диапазоне от 1 до самого высокого порядкового числа, экспортируемого в .def файле. Функция тогда использует порядковый номер как индекс, чтобы читать адрес функции из таблицы функций. Если .def файл не считает функции последовательно от 1 до N (где N - число экспортируемых функций), может произойти ошибка, где GetProcAddress возвращает недопустимый, не-NULL адрес, даже при том, что функции с указанным порядковым номером нет.
В случаях, когда функция не может существовать, она должна задаваться по имени, а не порядковым значением.
Код примера
Пример см. в статье Использование динамического связывания в период выполнения.
Смотри также
Обзор Динамически подключаемые библиотеки (DLL), Функции, используемые DLL, FreeLibrary, GetModuleHandle, LoadLibrary
Размещение и совместимость GetProcAddress |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT Workstation |
Да |
е |
Windows Me |
Да |
н |
Windows 98 |
Да |
т |
Windows 95 |
Да |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | kernel32.dll | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
Windows.h |
|
Unicode |
Нет |
|
Замечания по платформе |
Не имеется |