Share via


LoadLibrary と AfxLoadLibrary

更新 : 2007 年 11 月

プロセスに DLL を明示的にリンクする場合は、LoadLibrary (または AfxLoadLibrary) を呼び出します。この関数が正常終了した場合、呼び出し側のプロセスのアドレス空間に指定された DLL が割り当てられ、DLL へのハンドルが返されます。このハンドルは、GetProcAddressFreeLibrary など、明示的リンクに必要なほかの関数で使用できます。

LoadLibrary は、暗黙リンクと同じ検索シーケンスで DLL を探します。システムが DLL を見つけられない場合、またはエントリ ポイント関数が FALSE を返した場合は、LoadLibrary は NULL を返します。指定した DLL モジュールが呼び出し側プロセスのアドレス空間に既に割り当てられている場合、LoadLibrary は単に DLL のハンドルを返し、モジュールの参照回数を増やします。

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

拡張 DLL を読み込む MFC アプリケーションは、LoadLibrary ではなく AfxLoadLibrary を使用する必要があります。AfxLoadLibrary は、LoadLibrary を呼び出す前にスレッドの同期を処理します。AfxLoadLibrary のインターフェイス (関数プロトタイプ) は、LoadLibrary と同じです。

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

zzk20sxw.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

Windows NT 4、Windows 2000、または Windows XP (SP1 以前) でコードを実行する場合は、必ず DLL の完全パス名を指定してください。これらのオペレーティング システムでファイルを読み込むと、最初に現在のディレクトリが検索されます。ファイルにパスが付いていないと、目的のものでないファイルが読み込まれる場合があります。

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

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

参照

概念

DLL