GetProcAddress-Funktion (libloaderapi.h)
Ruft die Adresse einer exportierten Funktion (auch als Prozedur bezeichnet) oder Variable aus der angegebenen DLL (Dynamic Link Library) ab.
Syntax
FARPROC GetProcAddress(
[in] HMODULE hModule,
[in] LPCSTR lpProcName
);
Parameter
[in] hModule
Ein Handle für das DLL-Modul, das die Funktion oder Variable enthält. Die Funktion LoadLibrary, LoadLibraryEx, LoadPackagedLibrary oder GetModuleHandle gibt dieses Handle zurück.
Die GetProcAddress-Funktion ruft keine Adressen aus Modulen ab, die mit dem flag LOAD_LIBRARY_AS_DATAFILE geladen wurden. Weitere Informationen finden Sie unter LoadLibraryEx.
[in] lpProcName
Der Funktions- oder Variablenname oder der Ordnungswert der Funktion. Wenn es sich bei diesem Parameter um einen Ordnungswert handelt, muss er sich im Wort mit niedriger Ordnung befinden. Das Wort mit hoher Ordnung muss 0 (null) sein.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert die Adresse der exportierten Funktion oder Variablen.
Wenn bei der Funktion ein Fehler auftritt, ist der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Hinweise
Die Schreibweise und die Groß-/Kleinschreibung eines Funktionsnamens, auf den lpProcName verweist, müssen mit der in der EXPORTS-Anweisung der Moduldefinitionsdatei (.def) der Quell-DLL identisch sein. Die exportierten Namen von Funktionen können sich von den Namen unterscheiden, die Sie beim Aufrufen dieser Funktionen im 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 er einen Ordnungswert angibt, der der Funktion in der EXPORTS-Anweisung zugeordnet ist. GetProcAddress überprüft, ob die angegebene Ordnungszahl im Bereich 1 bis zum höchsten Ordinalwert liegt, der in der DEF-Datei exportiert wird. Die Funktion verwendet dann die Ordnungszahl als Index, um die Adresse der Funktion aus einer Funktionstabelle zu lesen.
Wenn die DEF-Datei die Funktionen nicht nacheinander von 1 bis N nummeriert (wobei N die Anzahl der exportierten Funktionen ist), kann ein Fehler auftreten, wenn GetProcAddress eine ungültige, nicht NULL-Adresse zurückgibt, obwohl keine Funktion mit der angegebenen Ordnungszahl vorhanden ist.
Wenn die Funktion im DLL-Modul möglicherweise nicht vorhanden ist (z. B. wenn die Funktion nur unter Windows Vista verfügbar ist, die Anwendung aber unter Windows XP ausgeführt wird), geben Sie die Funktion anhand des Namens und nicht anhand des Ordnungswerts an, und entwerfen Sie Ihre Anwendung so, dass sie den Fall behandelt, 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 (Einschließen von Windows.h) |
Bibliothek | Kernel32.lib |
DLL | Kernel32.dll |
Siehe auch
Dynamic-Link-Bibliotheksfunktionen