Freigeben über


GetModuleHandleA-Funktion (libloaderapi.h)

Ruft ein Modulhandle für das angegebene Modul ab. Das Modul muss vom aufrufenden Prozess geladen worden sein.

Verwenden Sie die GetModuleHandleEx-Funktion , um die im Abschnitt Hinweise beschriebenen Racebedingungen zu vermeiden.

Syntax

HMODULE GetModuleHandleA(
  [in, optional] LPCSTR lpModuleName
);

Parameter

[in, optional] lpModuleName

Der Name des geladenen Moduls (entweder eine .dll oder .exe Datei). Wenn die Dateinamenerweiterung weggelassen wird, wird die Standardbibliothekserweiterung .dll angefügt. Die Dateinamenzeichenfolge kann ein nachfolgendes Punktzeichen (.) enthalten, um anzugeben, dass der Modulname keine Erweiterung hat. Die Zeichenfolge muss keinen Pfad angeben. Achten Sie beim Angeben eines Pfads darauf, umgekehrte Schrägstriche (\) und keine Schrägstriche (/) zu verwenden. Der Name wird (unabhängig von Groß-/Kleinschreibung) mit den Namen der Module verglichen, die derzeit dem Adressraum des aufrufenden Prozesses zugeordnet sind.

Wenn dieser Parameter NULL ist, gibt GetModuleHandle ein Handle an die Datei zurück, die zum Erstellen des aufrufenden Prozesses (.exe Datei) verwendet wird.

Die GetModuleHandle-Funktion ruft keine Handles für Module ab, die mit dem flag LOAD_LIBRARY_AS_DATAFILE geladen wurden. Weitere Informationen finden Sie unter LoadLibraryEx.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für das angegebene Modul.

Wenn bei der Funktion ein Fehler auftritt, ist der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Das zurückgegebene Handle ist nicht global oder vererbbar. Sie kann nicht dupliziert oder von einem anderen Prozess verwendet werden.

Wenn lpModuleName keinen Pfad enthält und mehr als ein geladenes Modul mit demselben Basisnamen und derselben Erweiterung vorhanden ist, können Sie nicht vorhersagen, welches Modulhandle zurückgegeben wird. Um dieses Problem zu umgehen, können Sie einen Pfad angeben, parallele Assemblys verwenden oder GetModuleHandleEx verwenden, um einen Speicherspeicherort anstelle eines DLL-Namens anzugeben.

Die GetModuleHandle-Funktion gibt ein Handle an ein zugeordnetes Modul zurück, ohne dessen Verweisanzahl zu erhöhen. Wenn dieses Handle jedoch an die FreeLibrary-Funktion übergeben wird, wird die Verweisanzahl des zugeordneten Moduls verringert. Übergeben Sie daher kein von GetModuleHandle zurückgegebenes Handle an die FreeLibrary-Funktion . Dies kann dazu führen, dass die Mappe eines DLL-Moduls vorzeitig aufgehoben wird.

Diese Funktion muss in einer Multithreadanwendung sorgfältig verwendet werden. Es gibt keine Garantie, dass das Modulhandle zwischen dem Zeitpunkt, zu dem diese Funktion das Handle zurückgibt, und dem Zeitpunkt, zu dem es verwendet wird, gültig bleibt. Angenommen, ein Thread ruft ein Modulhandle ab, aber bevor er das Handle verwendet, gibt ein zweiter Thread das Modul frei. Wenn das System ein anderes Modul lädt, kann es das modulhandle wiederverwenden, das kürzlich freigegeben wurde. Daher verfügt der erste Thread über ein Handle für ein anderes Modul als das beabsichtigte.

Beispiele

Ein Beispiel finden Sie unter Verwenden von Pinsel.

Hinweis

Der libloaderapi.h-Header definiert GetModuleHandle als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile libloaderapi.h (Einschließen von Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Dynamic-Link-Bibliotheksfunktionen

FreeLibrary

GetModuleFileName

GetModuleHandleEx

LoadLibrary

LoadLibraryEx