GetProcAddress-Funktion (libloaderapi.h)

Ruft die Adresse einer exportierten Funktion (auch als Prozedur bezeichnet) oder Variable aus der angegebenen Dynamic-Link Library (DLL) ab.

Syntax

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

Parameter

[in] hModule

Ein Handle zum DLL-Modul, das die Funktion oder Variable enthält. Die LoadLibrary-, LoadLibraryEx-, LoadPackagedLibrary- oder GetModuleHandle-Funktion gibt diesen Handle zurück.

Die GetProcAddress-Funktion ruft keine Adressen von Modulen ab, die mit dem LOAD_LIBRARY_AS_DATAFILE Flag geladen wurden. Weitere Informationen finden Sie unter LoadLibraryEx.

[in] lpProcName

Der Funktions- oder Variablenname oder der Ordnungswert der Funktion. Wenn dieser Parameter ein Ordnungswert ist, muss er sich im Wort mit niedriger Reihenfolge befindet; Das Wort mit hoher Reihenfolge muss null sein.

Rückgabewert

Wenn die Funktion erfolgreich verläuft, ist der Rückgabewert die Adresse der exportierten Funktion oder Variable.

Wenn die Funktion fehlschlägt, lautet der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Die Schreibweise und der Fall eines Funktionsnamens, auf den lpProcName verweist, muss mit der in der EXPORT-Anweisung der Moduldefinitionsdatei (.def) der Quell-DLL identisch sein. Die exportierten Namen von Funktionen unterscheiden sich möglicherweise von den Namen, die Sie beim Aufrufen dieser Funktionen in Ihrem Code verwenden. Dieser Unterschied wird durch Makros ausgeblendet, die in den SDK-Headerdateien verwendet werden. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Der parameter lpProcName kann die DLL-Funktion identifizieren, indem ein Ordnungswert angegeben wird, der der Funktion in der EXPORTS-Anweisung zugeordnet ist. GetProcAddress überprüft, ob sich das angegebene Ordnungszeichen im Bereich 1 bis zum höchsten Ordinalwert befindet, der in der DEF-Datei exportiert wird. Die Funktion verwendet dann das Ordnungsverzeichnis als Index, um die Adresse der Funktion aus einer Funktionstabelle zu lesen.

Wenn die DEF-Datei die Funktionen nicht fortlaufend von 1 bis N nummeriert (wobei N die Anzahl der exportierten Funktionen ist), kann ein Fehler auftreten, bei dem GetProcAddress eine ungültige, nicht-NULL-Adresse zurückgibt, auch wenn keine Funktion mit dem angegebenen Ordinal vorhanden ist.

Wenn die Funktion möglicherweise nicht im DLL-Modul vorhanden ist , z. B. wenn die Funktion nur unter Windows Vista verfügbar ist, aber die Anwendung möglicherweise unter Windows XP ausgeführt wird, geben Sie die Funktion anhand des Namens anstelle des Ordnungswerts an, und entwerfen Sie die Anwendung so, dass sie den Fall behandeln kann, wenn die Funktion nicht verfügbar ist, wie im folgenden Codefragment gezeigt.


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


Das vollständige Beispiel, das dieses Codefragment enthält, finden Sie unter Abrufen der Systemversion.

Beispiele

Ein Beispiel finden Sie unter Verwenden von Run-Time dynamischen Verknüpfungen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile libloaderapi.h (include Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Funktionen der Dynamischen Verknüpfungsbibliothek

FreeLibrary

GetModuleHandle

LoadLibrary

LoadLibraryEx

LoadPackagedLibrary

Dynamische Verknüpfung zur Laufzeit