DisableThreadLibraryCalls-Funktion (libloaderapi.h)
Deaktiviert die DLL_THREAD_ATTACH und DLL_THREAD_DETACH Benachrichtigungen für die angegebene DLL (Dynamic Link Library). Dadurch kann die Größe des Arbeitssatzes für einige Anwendungen reduziert werden.
Syntax
BOOL DisableThreadLibraryCalls(
[in] HMODULE hLibModule
);
Parameter
[in] hLibModule
Ein Handle für das DLL-Modul, für das die DLL_THREAD_ATTACH- und DLL_THREAD_DETACH-Benachrichtigungen deaktiviert werden sollen. Die Funktion LoadLibrary, LoadLibraryEx oder GetModuleHandle gibt dieses Handle zurück. Beachten Sie, dass Sie GetModuleHandle nicht mit NULL
aufrufen können, da dadurch die Basisadresse des ausführbaren Images und nicht das DLL-Image zurückgegeben wird.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Die DisableThreadLibraryCalls-Funktion schlägt fehl, wenn die von hModule angegebene DLL über einen aktiven lokalen statischen Threadspeicher verfügt oder wenn hModule ein ungültiges Modulhandle ist. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Hinweise
Mit der Funktion DisableThreadLibraryCalls kann eine DLL die DLL_THREAD_ATTACH deaktivieren und Benachrichtigungsaufrufe DLL_THREAD_DETACH. Dies kann eine nützliche Optimierung für Multithreadanwendungen sein, die über viele DLLs verfügen, häufig Threads erstellen und löschen und deren DLLs diese Benachrichtigungen auf Threadebene zum Anfügen/Trennen nicht benötigen. Eine RPC-Serveranwendung (Remote Procedure Call) ist ein Beispiel für eine solche Anwendung. In diesen Anwendungen verbleiben DLL-Initialisierungsroutinen häufig im Arbeitsspeicher, um DLL_THREAD_ATTACH und DLL_THREAD_DETACH Benachrichtigungen zu verwalten. Durch Deaktivieren der Benachrichtigungen wird der DLL-Initialisierungscode nicht ausgelagert, da ein Thread erstellt oder gelöscht wird, wodurch die Größe des funktionierenden Codesatzes der Anwendung reduziert wird. Um die Optimierung zu implementieren, ändern Sie den DLL_PROCESS_ATTACH Code einer DLL so, dass DisableThreadLibraryCalls aufgerufen wird.
Rufen Sie diese Funktion nicht aus einer DLL auf, die mit der statischen C-Laufzeitbibliothek (CRT) verknüpft ist. Die statische CRT erfordert DLL_THREAD_ATTACH und DLL_THREAD_DETATCH Benachrichtigungen, um ordnungsgemäß zu funktionieren.
Diese Funktion führt keine Optimierungen durch, wenn statischer lokaler Threadspeicher (TLS) aktiviert ist. Statisches TLS ist aktiviert, wenn thread_local Variablen, __declspec ( Thread ) variablen oder funktionslokal statisch verwendet werden.
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 Library Entry-Point-Funktion