Partager via


GetProcAddress, fonction (libloaderapi.h)

Récupère l’adresse d’une fonction exportée (également appelée procédure) ou d’une variable à partir de la bibliothèque de liens dynamiques (DLL) spécifiée.

Syntaxe

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

Paramètres

[in] hModule

Handle du module DLL qui contient la fonction ou la variable. La fonction LoadLibrary, LoadLibraryEx, LoadPackagedLibrary ou GetModuleHandle retourne ce handle.

La fonction GetProcAddress ne récupère pas les adresses des modules qui ont été chargés à l’aide de l’indicateur LOAD_LIBRARY_AS_DATAFILE . Pour plus d’informations, consultez LoadLibraryEx.

[in] lpProcName

Nom de la fonction ou de la variable, ou valeur ordinale de la fonction. Si ce paramètre est une valeur ordinale, il doit se trouver dans le mot d’ordre inférieur ; le mot d’ordre élevé doit être égal à zéro.

Valeur retournée

Si la fonction réussit, la valeur de retour est l’adresse de la fonction ou de la variable exportée.

Si la fonction échoue, la valeur de retour est NULL. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

L’orthographe et la casse d’un nom de fonction pointé par lpProcName doivent être identiques à celles de l’instruction EXPORTS du fichier de définition de module (.def) de la DLL source. Les noms exportés des fonctions peuvent différer des noms que vous utilisez lors de l’appel de ces fonctions dans votre code. Cette différence est masquée par les macros utilisées dans les fichiers d’en-tête du SDK. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Le paramètre lpProcName peut identifier la fonction DLL en spécifiant une valeur ordinale associée à la fonction dans l’instruction EXPORTS . GetProcAddress vérifie que l’ordinal spécifié se trouve entre la plage 1 et la valeur ordinale la plus élevée exportée dans le fichier .def. La fonction utilise ensuite l’ordinal comme index pour lire l’adresse de la fonction à partir d’une table de fonction.

Si le fichier .def ne numérot pas les fonctions consécutivement de 1 à N (où N est le nombre de fonctions exportées), une erreur peut se produire lorsque GetProcAddress retourne une adresse non-NULL non valide, même s’il n’existe aucune fonction avec l’ordinal spécifié.

Si la fonction n’existe peut-être pas dans le module DLL (par exemple, si la fonction est disponible uniquement sur Windows Vista, mais que l’application s’exécute sur Windows XP), spécifiez la fonction par nom plutôt que par valeur ordinale et concevez votre application pour gérer le cas où la fonction n’est pas disponible, comme indiqué dans le fragment de code suivant.

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

Pour obtenir l’exemple complet qui contient ce fragment de code, consultez Obtention de la version système.

Exemples

Pour obtenir un exemple, consultez Utilisation de Run-Time liaison dynamique.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête libloaderapi.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

Fonctions de bibliothèque de liens dynamiques

FreeLibrary

GetModuleHandle

LoadLibrary

LoadLibraryEx

LoadPackagedLibrary

Liaison dynamique au moment de l’exécution

API Vertdll disponibles dans les enclaves VBS