パラメータ
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)ではなく、スレッドローカル記憶域関数を使う。
|