更新 : 2007 年 11 月
実行時に DLL を実際に読み込むのは、リンカがサポートする遅延読み込み用のヘルパ関数です。ヘルパ関数の動作をカスタマイズするには、Delayimp.lib で提供されているヘルパ関数を使用する代わりに、独自の関数を作成し、プログラムにリンクします。1 つのヘルパ関数で、すべての遅延読み込み DLL を処理できます。
独自のヘルパ関数を作成すると、DLL またはインポートの名前に基づいて特定の処理を実行できます。
ヘルパ関数は以下の処理を行います。
格納されているライブラリ ハンドルを調べて、ライブラリが読み込み済みかどうかを確認します。
LoadLibrary を呼び出して、DLL を読み込みます。
GetProcAddress を呼び出して、プロシージャのアドレスを取得します。
遅延インポート読み込みサンクに制御を返して、現在読み込まれているエントリ ポイントを呼び出します。
ヘルパ関数は、以下の時点で、プログラムの通知フックにコールバックできます。
ヘルパ関数が起動したとき
ヘルパ関数から LoadLibrary を呼び出す直前
ヘルパ関数から GetProcAddress を呼び出す直前
ヘルパ関数から LoadLibrary への呼び出しが失敗した場合
ヘルパ関数から GetProcAddress への呼び出しが失敗した場合
ヘルパ関数の処理が終了した後
これらの各フック ポイントでは、ヘルパ ルーチンの通常の処理を変更する値を返すことができます。ただし、遅延インポート読み込みサンクへ戻る処理は変更できません。
既定のヘルパー コードは、vc\include フォルダの Delayhlp.cpp と Delayimp.h にあり、vc\lib フォルダの Delayimp.lib にコンパイルされています。独自のヘルパ関数を作成しない場合は、コンパイル時にこのライブラリをインクルードする必要があります。
ヘルパ関数の詳細については、次のトピックを参照してください。