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