Funzione GetProcAddress (libloaderapi.h)

Recupera l'indirizzo di una funzione esportata (nota anche come routine) o variabile dalla libreria di collegamento dinamico specificata (DLL).

Sintassi

FARPROC GetProcAddress(
  [in] HMODULE hModule,
  [in] LPCSTR  lpProcName
);

Parametri

[in] hModule

Handle per il modulo DLL che contiene la funzione o la variabile. La funzione LoadLibrary, LoadLibraryEx, LoadPackagedLibrary o GetModuleHandle restituisce questo handle.

La funzione GetProcAddress non recupera gli indirizzi dai moduli caricati usando il flag di LOAD_LIBRARY_AS_DATAFILE . Per altre informazioni, vedere LoadLibraryEx.

[in] lpProcName

Il nome della funzione o della variabile o il valore ordinale della funzione. Se questo parametro è un valore ordinale, deve essere nella parola a basso ordine; la parola di ordine elevato deve essere zero.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è l'indirizzo della funzione o della variabile esportata.

Se la funzione ha esito negativo, il valore restituito è NULL. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

L'ortografia e il caso di un nome di funzione puntato da lpProcName deve essere identico a quello nell'istruzione EXPORT del file module-definition (.def) della DLL di origine. I nomi esportati di funzioni possono essere diversi dai nomi usati quando si chiamano queste funzioni nel codice. Questa differenza è nascosta dalle macro usate nei file di intestazione SDK. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Il parametro lpProcName può identificare la funzione DLL specificando un valore ordinale associato alla funzione nell'istruzione EXPORT . GetProcAddress verifica che l'ordinale specificato si trova nell'intervallo 1 attraverso il valore ordinale più alto esportato nel file con estensione def. La funzione usa quindi l'ordinale come indice per leggere l'indirizzo della funzione da una tabella di funzioni.

Se il file con estensione def non numera le funzioni consecutivamente da 1 a N (dove N è il numero di funzioni esportate), può verificarsi un errore in cui GetProcAddress restituisce un indirizzo non valido, non NULL, anche se non esiste alcuna funzione con l'ordinale specificato.

Se la funzione potrebbe non esistere nel modulo DLL, ad esempio se la funzione è disponibile solo in Windows Vista, ma l'applicazione potrebbe essere in esecuzione in Windows XP, specificare la funzione per nome anziché per valore ordinale e progettare l'applicazione per gestire il caso quando la funzione non è disponibile, come illustrato nel frammento di codice seguente.

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);
   }

Per l'esempio completo che contiene questo frammento di codice, vedere Recupero della versione di sistema.

Esempio

Per un esempio, vedere Uso di Run-Time collegamento dinamico.

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione libloaderapi.h (includere Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

Funzioni della libreria di collegamento dinamico

FreeLibrary

GetModuleHandle

LoadLibrary

LoadLibraryEx

LoadPackagedLibrary

Collegamento dinamico in fase di esecuzione

API Vertdll disponibili nelle enclave VBS