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 módulos cargados mediante la marca LOAD_LIBRARY_AS_DATAFILE . Para obtener más información, consulte LoadLibraryEx.
[in] lpProcName
El 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 realiza correctamente, el valor devuelto es la dirección de la función o variable exportada.
Si la función no se realiza correctamente, 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 module-definition (.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 que se usan 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 ejecutarse 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, vea 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 (incluye Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |
Vea también
Funciones de la biblioteca de vínculos dinámicos