次の方法で共有


ヘルパ関数について

更新 : 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 にコンパイルされています。独自のヘルパ関数を作成しない場合は、コンパイル時にこのライブラリをインクルードする必要があります。

ヘルパ関数の詳細については、次のトピックを参照してください。

参照

概念

リンカによる DLL の遅延読み込み