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

FreeLibrary

GetModuleHandle

LoadLibrary

LoadLibraryEx

LoadPackagedLibrary

Vinculación dinámica en tiempo de ejecución

API de Vertdll disponibles en enclaves de VBS