Función GetProcAddress (libloaderapi.h)
Recupera la dirección de una función exportada (también conocida como procedimiento) o variable de la biblioteca de vínculos dinámicos (DLL) especificada.
Sintaxis
FARPROC GetProcAddress(
[in] HMODULE hModule,
[in] LPCSTR lpProcName
);
Parámetros
[in] hModule
Identificador del módulo DLL que contiene la función o variable. La función LoadLibrary, LoadLibraryEx, LoadPackagedLibrary o GetModuleHandle devuelve este identificador.
La función GetProcAddress no recupera direcciones de los módulos cargados con la marca LOAD_LIBRARY_AS_DATAFILE . Para obtener más información, vea LoadLibraryEx.
[in] lpProcName
Nombre de la función o variable, o el valor ordinal de la función. Si este parámetro es un valor ordinal, debe estar en la palabra de orden inferior; la palabra de orden superior debe ser cero.
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es la dirección de la función o variable exportada.
Si se produce un error en la función, el valor devuelto es NULL. Para obtener información de error extendida, llame a GetLastError.
Comentarios
La ortografía y el caso de un nombre de función al que apunta lpProcName deben ser idénticos a los de la instrucción EXPORTS del archivo de definición de módulo (.def) del archivo DLL de origen. Los nombres exportados de funciones pueden diferir de los nombres que se usan al llamar a estas funciones en el código. Esta diferencia está oculta por las macros usadas en los archivos de encabezado del SDK. Para obtener más información, vea Convenciones para prototipos de función.
El parámetro lpProcName puede identificar la función DLL especificando un valor ordinal asociado a la función en la instrucción EXPORTS . GetProcAddress comprueba que el ordinal especificado está en el intervalo 1 hasta el valor ordinal más alto exportado en el archivo .def. A continuación, la función usa el ordinal como índice para leer la dirección de la función de una tabla de funciones.
Si el archivo .def no numera las funciones consecutivamente de 1 a N (donde N es el número de funciones exportadas), se puede producir un error en el que GetProcAddress devuelve una dirección no válida y no NULL, aunque no haya ninguna función con el ordinal especificado.
Si es posible que la función no exista en el módulo DLL (por ejemplo, si la función solo está disponible en Windows Vista, pero la aplicación podría estar ejecutándose en Windows XP), especifique la función por nombre en lugar de por valor ordinal y diseñe la aplicación para controlar el caso cuando la función no está disponible, como se muestra en el siguiente fragmento de código.
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
PGNSI pGNSI;
SYSTEM_INFO si;
ZeroMemory(&si, sizeof(SYSTEM_INFO));
pGNSI = (PGNSI) GetProcAddress(
GetModuleHandle(TEXT("kernel32.dll")),
"GetNativeSystemInfo");
if(NULL != pGNSI)
{
pGNSI(&si);
}
else
{
GetSystemInfo(&si);
}
Para obtener el ejemplo completo que contiene este fragmento de código, consulte Obtención de la versión del sistema.
Ejemplos
Para obtener un ejemplo, consulte Uso de Run-Time vinculación dinámica.
Requisitos
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | libloaderapi.h (incluya Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |