次の方法で共有


ヘルパー関数について

実行時に DLL を実際に読み込むのは、リンカーがサポートする遅延読み込み用のヘルパー関数です。ヘルパー関数の動作をカスタマイズするには、Delayimp.lib で提供されているヘルパー関数を使用する代わりに、独自の関数を作成し、プログラムにリンクします。1 つのヘルパー関数で、すべての遅延読み込み DLL を処理できます。

独自のヘルパー関数を作成すると、DLL またはインポートの名前に基づいて特定の処理を実行できます。

ヘルパー関数は以下の処理を行います。

  • 格納されているライブラリ ハンドルを調べて、ライブラリが読み込み済みかどうかを確認します。

  • LoadLibrary を呼び出して、DLL を読み込みます。

  • GetProcAddress を呼び出して、プロシージャのアドレスを取得します。

  • 遅延インポート読み込みサンクに制御を返して、現在読み込まれているエントリ ポイントを呼び出します。

ヘルパー関数は、以下の時点で、プログラムの通知フックにコールバックできます。

  • ヘルパー関数が起動したとき

  • ヘルパー関数から LoadLibrary を呼び出す直前

  • ヘルパー関数から GetProcAddress を呼び出す直前

  • ヘルパー関数から LoadLibrary への呼び出しが失敗した場合

  • ヘルパー関数から GetProcAddress への呼び出しが失敗した場合

  • ヘルパー関数の処理が終了した後

これらの各フック ポイントでは、ヘルパー ルーチンの通常の処理を変更する値を返すことができます。ただし、遅延インポート読み込みサンクへ戻る処理は変更できません。

既定のヘルパー コードは、vc\include フォルダーの Delayhlp.cpp と Delayimp.h にあり、vc\lib フォルダーの Delayimp.lib にコンパイルされています。独自のヘルパー関数を作成しない場合は、コンパイル時にこのライブラリをインクルードする必要があります。

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

参照

概念

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