/DELAY (遅延読み込みのインポート設定)
更新 : 2007 年 11 月
/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 を参照してください。