<Return[JKL]><Top>

LoadLibraryEx

Declare Function Api_LoadLibraryEx& Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName$, ByVal hFile&, ByVal dwFlags&)

Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long

指定された実行可能モジュールを、呼び出し側プロセスのアドレス空間にマップする。実行可能モジュールは、.DLL ファイルまたは .EXE ファイルである。この指定されたモジュールにより、ほかのモジュールがアドレス空間にマップされることがある。

パラメータ
lpLibFileName
    Windows の実行可能モジュール(.DLL ファイルまたは .EXE ファイル)を示す NULL で終わる文字列へのポインタを指定する。指定する名

    前は、実行可能モジュールのファイル名である。この名前は、モジュール定義ファイル(.DEF)の LIBRARY キーワードで指定され、ライブラ

    リモジュール自体に格納された名前とは関係ない。
    文字列でパスを指定しているにもかかわらず、指定されたディレクトリに該当するファイルがない場合、関数は失敗する。パスを指定する場

    合は、スラッシュ(/)ではなく円記号(\)を使う。
    文字列でパスを指定せず、ファイル名の拡張子を省略すると、この関数は、ファイル名に既定のライブラリ拡張子(.DLL)を追加する。ファイ

    ル名の文字列にピリオド(.)をつけて、モジュールに拡張子がないことを示すこともできる。
    文字列でパスを指定しない場合、この関数は標準のファイル検索方法を使う。
    指定したモジュールをアドレス空間にマップしたために、別に関連付けられた実行可能モジュールがオペレーティングシステムによりマップされ

    た場合、これらのモジュールを標準的な方法または別の方法で検索することができる。
hFile
    このパラメータは将来使うために予約されている。NULL を指定する。
dwFlags
    モジュールをロードするときのアクションを指定する。次のいずれかの値を指定する。
 

    フラグ                                                          

意味                                                                                                              

    DONT_RESOLVE_DLL_REFERENCES

 

 

 

 

 

 

Windows NT のみ :
実行可能モジュールがダイナミックリンクライブラリ(DLL)である場合にこの値を指定すると、プロセスとスレッドの初期化および終了のためにオペレーティングシステムが DllEntryPoint 関数を呼び出すことはない。また、指定したモジュールが参照する実行可能モジュールをシステムが補足的にロードすることもない。
実行可能モジュールがダイナミックリンクライブラリ(DLL)である場合にこの値を指定しないと、プロセスとスレッドの初期化および終了のためにオペレーティングシステムは DllEntryPoint 関数を呼び出す。また、指定したモジュールが参照する実行可能モジュールもシステムが補足的にロードする。この場合、この関数の動作は LoadLibrary の動作と同じになる。

    LOAD_LIBRARY_AS_DATAFILE

 

 

 

 

この値を指定すると、関数は単純にファイルをアドレス空間へマップする。マップされたファイル内のコードの実行準備や実行に関しては何も行わない。関数はモジュールをデータファイルと同様にロードする。この場合、リソースで実行される Win32 関数と共に、この関数が返すモジュールハンドルを使うことができる。このフラグは、ロードした DLL からメッセージやリソースを抽出するだけで DLL のコードを実行しないときに使う。
この値を指定しないと、実行可能モジュールに通常適用される方法でファイルをアドレス空間へマップする。この場合、この関数の動作は LoadLibrary の動作と同じになる。

    LOAD_WITH_ALTERED_SEARCH_PATH

 

 

 

 

LpLibFileName パラメータにパスが含まれている場合にこの値を指定すると、後述の「解説」の項で説明する代替のファイル検索方法を使って、指定したモジュールが原因でロードされる、関連する実行可能モジュールが検索される。
この値を指定しない場合、または LpLibFileName パラメータにパスが含まれていない場合は、後述の「解説」の項で説明する標準のファイル検索方法を使って、指定したモジュールが原因でロードされる、関連する実行可能モジュールが検索される。この場合、この関数の動作は LoadLibrary の動作と同じになる。


戻り値
    関数が成功すると、マップされた実行可能モジュールのハンドルが返る。
    関数が失敗すると、NULL が返る。拡張エラー情報を取得するには、 関数を使う。

解説
    呼び出し側プロセスは、この関数から返されるハンドルを使い、GetProcAddress 関数、 関数および 関数を呼び出してモジュールを特定す

    ることができる。
    LoadLibraryEx 関数は、LoadLibrary ���数とよく似ているこれらの関数の相違点は、LoadLibraryEx 関数にはオプションの動作があ

    るという点である。1 つは、LoadLibraryEx 関数では、DLL の DllEntryPoint 関数を呼び出さずに DLL モジュールをマップすることがで

    きる。2 つ目は、指定したモジュールに関連付けられた実行可能モジュールを検索する場合に、2 種類のファイル検索方法を適用できると

    いう点である。3 つ目は、モジュールを実行しない場合に適した方法として、モジュールをデータファイルのようにロードすることができる。この

    ようなオプションの動作を選択するには、dwFlags パラメータに値を指定する。ただし、dwFlags に 0 を設定すると、LoadLibraryEx 関数

    の動作は LoadLibrary 関数と同じになる。
    lpLibFileName パラメータでパスが指定されておらず、基本ファイル名がロードしたモジュールの基本ファイル名と一致しない場合、

    LoadLibraryEx 関数は、LoadLibrary 関数、 関数、および 関数が実行可能モジュールとそれに関連して呼び出された実行可能モジュ

    ールを検索する場合と同じ、標準のファイル検索方法を使う。標準のファイル検索方法では、次の順で検索が行われる。
        1.アプリケーションのロード元ディレクトリ。
        2.現在のディレクトリ。
        3.Windows 95: Windows System ディレクトリ。このディレクトリのパスを取得するには、 関数を使うT: 32 ビットの Windows System ディ

           レクトリ。このディレクトリのパスを取得するには、GetSystemDirectory 関数を使う。このディレクトリ名は、SYSTEM32 である。
        4.Windows NT のみ : 16 ビットの Windows System ディレクトリ。このディレクトリのパスを取得する関数はないが、検索により取得でき

           る。このディレクトリ名は、SYSTEM である。
        5.Windows ディレクトリ。このディレクトリのパスを取得するには、 関数を使う。
        6.PATH 環境変数にリストされたディレクトリ。
    パスが指定されている場合に dwFlags パラメータに LOAD_WITH_ALTERED_SEARCH_PATH を設定すると、LoadLibraryEx 関数は

    代替のファイル検索方法を使って、指定されたモジュールが原因でロードされる、関連する実行可能モジュールを検索する。代替のファイル

    検索方法では、次の順で検索が行われる。
        1.lpLibFileName パスで指定されたディレクトリ。つまり、指定した実行可能モジュールが格納されているディレクトリ。
        2.現在のディレクトリ。
        3.Windows 95: Windows System ディレクトリ。このディレクトリのパスを取得するには、 関数を使う。
           Windows NT: 32 ビットの Windows System ディレクトリ。このディレクトリのパスを取得するには、GetSystemDirectory 関数を使う。  

           このディレクトリ名は、SYSTEM32 である。
        4.Windows NT のみ : 16 ビットの Windows System ディレクトリ。このディレクトリのパスを取得する関数はないが、検索により取得でき

           る。このディレクトリ名は、SYSTEM である。
        5.Windows ディレクトリ。このディレクトリのパスを取得するには、 関数を使う。
        6.PATH 環境変数にリストされたディレクトリ。
    標準のファイル検索方法と代替のファイル検索方法の相違点は、次の一点だけである。標準のファイル検索方法では、呼び出し側アプリ

    ケーションのディレクトリから検索が開始され、代替のファイル検索方法では、LoadLibraryEx 関数がロードしている実行可能モジュールか

    ら検索が開始される点である。
    代替のファイル検索方法を指定すると、関連する実行可能モジュールがすべて検索されるまで処理が続く。ただし、いったんシステムが

    DLL 初期化ルーチンの処理を開始すると、標準のファイル検索方法に切り替わる。
    Visual C++ のコンパイラでは、スレッドローカル変数 _declspec(thread)を宣言できる構文がサポートされている。DLL でこの構文を使う

    と、LoadLibrary 関数または LoadLibraryEx 関数を使って DLL を明示的にロードすることができなくなる。DLL を明示的にロードするに

    は、_declspec(thread)ではなく、スレッドローカル記憶域関数を使う。