LoadLibrary と AfxLoadLibrary

プロセスでは、DLL に明示的にリンクするために、LoadLibrary または LoadLibraryEx が呼び出されます (MFC アプリでは AfxLoadLibrary または AfxLoadLibraryEx.)関数が成功すると、指定した DLL が呼び出し元プロセスのアドレス空間にマップされ、DLL にハンドルが返されます。 このハンドルは、GetProcAddressFreeLibrary など、明示的リンクに必要な他の関数で使用できます。 詳細については、明示的リンクに関するセクションを参照してください。

LoadLibrary は、暗黙リンクと同じ検索シーケンスで DLL を探します。 LoadLibraryEx を使用すると、検索パスの順序をより細かく制御できます。 詳細については、ダイナミック リンク ライブラリの検索順序に関するページを参照してください。 システムが DLL を見つけられない場合、またはエントリ ポイント関数が FALSE を返した場合、LoadLibrary は NULL を返します。 LoadLibrary への呼び出しで指定される DLL モジュールが呼び出し元プロセスのアドレス空間に既に割り当てられている場合、この関数は DLL のハンドルを返し、モジュールの参照カウントをインクリメントします。

DLL にエントリ ポイント関数が含まれる場合、オペレーティング システムは、LoadLibrary または LoadLibraryEx を呼び出したスレッドのコンテキスト内でその関数を呼び出します。 DLL が既にプロセスにアタッチされている場合、エントリポイント関数は呼び出されません。 これは、DLL の LoadLibrary または LoadLibraryEx への以前の呼び出し時に、対応する FreeLibrary 関数への呼び出しがなかった場合に発生します。

拡張 DLL を読み込む MFC アプリケーションでは、LoadLibrary または LoadLibraryEx の代わりに AfxLoadLibrary または AfxLoadLibraryEx を使用することをお勧めします。 MFC 関数は、DLL を明示的に読み込む前にスレッドの同期を処理します。 AfxLoadLibraryAfxLoadLibraryEx に対するインターフェイス (関数プロトタイプ) は、LoadLibraryLoadLibraryEx に対するものと同じです。

Windows が DLL を読み込むことができない場合は、プロセスでエラーからの回復を試みることができます。 たとえば、ユーザーにエラーを通知し、DLL への別のパスを要求することができます。

重要

DLL の完全パスを指定してください。 LoadLibrary によってファイルが読み込まれるときに、現在のディレクトリが最初に検索される場合があります。 ファイルのパスを完全に指定しないと、意図したファイルでないファイルが読み込まれる可能性があります。 DLL を作成するときは、/DEPENDENTLOADFLAG リンカー オプションを使用して、静的にリンクされた DLL の依存関係の検索順序を指定します。 DLL 内では、依存関係を明示的に読み込むための完全なパスと、モジュールの検索順序を指定するための呼び出しパラメーター LoadLibraryEx または AfxLoadLibraryEx を使用します。 詳細については、ダイナミック リンク ライブラリのセキュリティダイナミック リンク ライブラリの検索順序に関するページを参照してください。

目的に合ったトピックをクリックしてください

さらに詳しくは次のトピックをクリックしてください

関連項目