LoadLibraryW 関数 (libloaderapi.h)
指定したモジュールを呼び出し元プロセスのアドレス空間に読み込みます。 指定されたモジュールによって、他のモジュールが読み込まれる可能性があります。
追加の読み込みオプションについては、LoadLibraryEx 関数を使用します。
構文
HMODULE LoadLibraryW(
[in] LPCWSTR lpLibFileName
);
パラメーター
[in] lpLibFileName
モジュールの名前。 これは、ライブラリ モジュール (.dll ファイル) または実行可能モジュール (.exe ファイル) のいずれかです。
指定したモジュールが実行可能モジュールの場合、静的インポートは読み込まれません。代わりに、
指定された名前はモジュールのファイル名であり、モジュール定義 (.def) ファイルの LIBRARY キーワードで指定されているように、ライブラリ モジュール自体に格納されている名前には関係ありません。
文字列で完全なパスが指定されている場合、関数はモジュールのそのパスのみを検索します。
文字列が相対パスまたはパスのないモジュール名を指定する場合、関数は標準の検索戦略を使用してモジュールを検索します。詳細については、「解説」を参照してください。
関数がモジュールを見つけられない場合、関数は失敗します。 パスを指定するときは、スラッシュ (/) ではなく円記号 (\) を使用してください。 パスの詳細については、「ファイルまたはディレクトリの名前付け」を参照してください。
文字列でパスのないモジュール名を指定し、ファイル名拡張子を省略すると、既定のライブラリ拡張機能 ".DLL" がモジュール名に追加されます。 関数がモジュール名に ".DLL" を追加しないようにするには、モジュール名の文字列に末尾のポイント文字 (.) を含めます。
戻り値
関数が成功した場合、戻り値はモジュールへのハンドルです。
関数が失敗した場合、戻り値は NULL です。 拡張エラー情報を取得するには、GetLastError
備考
DLL の読み込み中にローダーによって表示されるエラー メッセージを有効または無効にするには、SetErrorMode 関数を使用します。
LoadLibrary を使用すると、ライブラリ モジュールをプロセスのアドレス空間に読み込み、GetProcAddress で使用できるハンドルを返して DLL 関数のアドレスを取得できます。
LoadLibrary を使用して、他の実行可能モジュールを読み込むこともできます。 たとえば、関数は、.exe ファイルを指定して、
指定されたモジュールが呼び出し元のプロセス用にまだ読み込まれていない DLL の場合、システムは DLL の DllMain 関数を DLL_PROCESS_ATTACH 値で呼び出します。 DllMain
モジュール ハンドルはグローバルまたは継承できません。 あるプロセス LoadLibrary を呼び出しても、別のプロセスが使用できるハンドルは生成されません。たとえば、GetProcAddressを呼び出す場合などです。 もう 1 つのプロセスでは、GetProcAddressを呼び出す前に、モジュール
lpFileName
lpFileName パラメーターにファイル名拡張子が指定されていない場合は、既定のライブラリ拡張 .dll が追加されます。 ただし、ファイル名の文字列には、モジュール名に拡張子がないことを示す末尾のポイント文字 (.) を含めることができます。 パスが指定されていない場合、関数は、読み込まれるモジュールの基本名と一致するベース名を持つ読み込まれたモジュールを検索します。 名前が一致すると、読み込みが成功します。 それ以外の場合、関数はファイルを検索します。
最初に検索されるディレクトリは、呼び出し元プロセスの作成に使用されるイメージ ファイルを含むディレクトリです (詳細については、CreateProcess 関数
検索パスは、SetDllDirectory 関数を使用して変更できます。 このソリューションは、SetCurrentDirectory を使用したり、DLL への完全なパスをハードコーディングしたりする代わりに推奨されます。
パスが指定されていて、アプリケーションのリダイレクト ファイルがある場合、関数はアプリケーションのディレクトリ内のモジュールを検索します。 モジュールがアプリケーションのディレクトリに存在する場合、LoadLibrary
パス指定のないアセンブリの名前 LoadLibrary を呼び出し、アセンブリがシステム互換マニフェストに一覧表示されている場合、呼び出しはサイド バイ サイド アセンブリに自動的にリダイレクトされます。
システムは、読み込まれたすべてのモジュールに対してプロセスごとの参照カウントを保持します。 LoadLibrary
Windows Server 2003 および Windows XP: Visual C++ コンパイラでは、スレッド ローカル変数 (_declspec(スレッド)を宣言できる構文がサポートされています。 DLL でこの構文を使用する場合は、Windows Vista より前のバージョンの Windows LoadLibrary を使用して DLL を明示的に読み込むことができなくなります。 DLL が明示的に読み込まれる場合は、_declspec(スレッド)の代わりにスレッド ローカル ストレージ関数を使用する必要があります。 例については、「ダイナミック リンク ライブラリでのスレッド ローカル ストレージの使用の
セキュリティに関する備考
DLL を検索する LoadLibrary 呼び出しに基づいてオペレーティング システムのバージョンを想定しないでください。 DLL が正当に存在しないが、DLL の悪意のあるバージョンが検索パスにある環境でアプリケーションが実行されている場合は、悪意のあるバージョンの DLL が読み込まれる可能性があります。 代わりに、「システム バージョンのの取得
例
例については、「Run-Time ダイナミック リンクの使用
手記
libloaderapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして LoadLibrary を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | libloaderapi.h (Windows.h を含む) |
ライブラリ | Kernel32.lib |
DLL | Kernel32.dll |
関連項目
FindResource の
GetProcAddress の
GetSystemDirectory の
GetWindowsDirectory の
LoadResource の
動的リンク の
SetErrorMode の