次の方法で共有


DisableThreadLibraryCalls 関数 (libloaderapi.h)

指定したダイナミック リンク ライブラリ (DLL) のDLL_THREAD_ATTACH通知とDLL_THREAD_DETACH通知を無効にします。 これにより、一部のアプリケーションのワーキング セットのサイズを小さくできます。

構文

BOOL DisableThreadLibraryCalls(
  [in] HMODULE hLibModule
);

パラメーター

[in] hLibModule

DLL_THREAD_ATTACH通知とDLL_THREAD_DETACH通知を無効にする DLL モジュールへのハンドル。 LoadLibraryLoadLibraryEx、または GetModuleHandle 関数は、このハンドルを返します。 で GetModuleHandleNULL を呼び出すことはできません。これは、DLL イメージではなく実行可能イメージのベース アドレスを返すからです。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 DisableThreadLibraryCalls 関数は、hModule で指定された DLL にアクティブな静的スレッド ローカル ストレージがある場合、または hModule が無効なモジュール ハンドルである場合に失敗します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

DisableThreadLibraryCalls 関数を使用すると、DLL でDLL_THREAD_ATTACHを無効にし、通知呼び出しをDLL_THREAD_DETACHできます。 これは、多くの DLL を持ち、頻繁にスレッドを作成および削除し、DLL に添付ファイル/デタッチのスレッド レベルの通知を必要としないマルチスレッド アプリケーションに便利な最適化です。 リモート プロシージャ コール (RPC) サーバー アプリケーションは、このようなアプリケーションの例です。 このようなアプリケーションでは、DLL 初期化ルーチンは、多くの場合、サービス DLL_THREAD_ATTACHとDLL_THREAD_DETACH通知にメモリ内に残ります。 通知を無効にすると、スレッドが作成または削除されるため、DLL 初期化コードはページングされないため、アプリケーションの作業コード セットのサイズが小さくなります。 最適化を実装するには、DLL のDLL_PROCESS_ATTACH コードを変更して DisableThreadLibraryCalls を呼び出します。

静的 C ランタイム ライブラリ (CRT) にリンクされている DLL からこの関数を呼び出さないでください。 静的 CRT が正常に機能するには、DLL_THREAD_ATTACH通知とDLL_THREAD_DETATCH通知が必要です。

静的 スレッド ローカル ストレージ (TLS) が有効になっている場合、この関数は最適化を実行しません。 静的 TLS は、 thread_local 変数、 __declspec( スレッド ) 変数、または関数ローカル 静的を使用する場合に有効になります。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー libloaderapi.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

ダイナミック リンク ライブラリ Entry-Point 関数

ダイナミック リンク ライブラリ関数

FreeLibraryAndExitThread

VBS エンクレーブで使用できる Vertdll API