LoadLibrary と AfxLoadLibrary
プロセス (LoadLibrary または) を呼び出します。AfxLoadLibraryDLL と明示的にリンクする。関数が成功した場合は、呼び出し元プロセスのアドレス空間に指定された DLL が割り当てられ、例、および GetProcAddressFreeLibraryリンクの明示的な他の関数で使用できる DLL のハンドルを返します。
暗黙的リンクの場合と同じ検索シーケンスで DLL を検索LoadLibrary を 試みます。システムが DLL を見つけられない場合、またはエントリ ポイント関数が FALSE を返した場合、LoadLibrary は NULL を返します。LoadLibrary の呼び出しが呼び出し元プロセスのアドレス空間に既に割り当てられている DLL のモジュールを指定すると、関数が DLL のハンドルを返し、モジュールの参照カウントをインクリメントします。
DLL にエントリ ポイント関数が含まれる場合、オペレーティング システムは、LoadLibrary を呼び出したスレッドのコンテキスト内でその関数を呼び出します。エントリ ポイント関数は、DLL が FreeLibrary の関数に対応する呼び出しがない LoadLibrary への前の呼び出しで既にプロセスにアタッチされている場合は呼び出されません。
拡張 DLL を読み込む MFC アプリケーションでは、LoadLibrary の代わりに AfxLoadLibrary を使用することをお勧めします。LoadLibrary を呼び出す前に、AfxLoadLibrary でスレッド同期を処理します。AfxLoadLibrary のインターフェイス (関数プロトタイプ) は、LoadLibrary と同じです。
Windows が DLL を読み込むことができない場合は、プロセスでエラーからの回復を試みることができます。たとえば、プロセスがユーザーにエラーを通知して、ユーザーに DLL への別のパスを指定するよう要求できます。
セキュリティに関するメモ |
---|
コードが (SP1) 前に、Windows NT、Windows 2000、Windows XP で実行する場合は、必ず DLL の完全パスを指定してください。これらのオペレーティング システムでファイルが読み込まれると、最初に現在のディレクトリが検索されます。ファイルのパスを指定しない場合、意図したものではないファイルが読み込まれる場合があります。 |