/DELAY (遅延読み込みのインポート設定)
/DELAY:UNLOAD
/DELAY:NOBIND
解説
/DELAY オプションは、DLL の遅延読み込みを制御します。
UNLOAD 修飾子は、DLL の明示的なアンロードをサポートするように、遅延読み込みヘルパー関数に指示します。これは、インポート アドレス テーブル (IAT: Import Address Table) を元の形式にリセットし、IAT のポインターを無効にして上書き可能な状態にすることで実現されます。
UNLOAD を選択しないと、FUnloadDelayLoadedDLL の呼び出しに失敗します。
NOBIND 修飾子は、最終イメージに連結可能な IAT を含めないようにリンカーに指示します。既定では、遅延読み込みの DLL に対して連結可能な IAT が作成されます。その結果生成されるイメージは、静的にバインドできません。連結可能な IAT を含むイメージの場合は、実行前に静的にバインドできます。/BIND」を参照してください。
DLL をバインドすると、ヘルパー関数は、参照先の各インポートに対して GetProcAddress を呼び出さずに、バインドされた情報を使用します。タイムスタンプまたは設定アドレスが、読み込まれた DLL のものと一致しない場合は、ヘルパー関数はバインドされた IAT が最新でないと見なし、バインドされた IAT がないものとして処理を続けます。
NOBIND を指定すると、プログラム イメージが大きくなりますが、DLL の読み込み時間は速くなります。DLL をバインドしない場合は、NOBIND を指定すると、バインドされた IAT は生成されません。
DLL の遅延読み込みを指定するには、/DELAYLOAD オプションを使用します。
Visual Studio 開発環境でこのリンカー オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「Visual C++ プロジェクトのプロパティの設定」を参照してください。
[リンカー] フォルダーをクリックします。
[詳細] プロパティ ページをクリックします。
[DLL の遅延読み込み] プロパティを変更します。
このリンカーをコードから設定するには
- DelayLoadDLLs を参照してください。