http://msdn.microsoft.com/en-us/library/151kt790.aspxの手順を使用して、プロジェクトに遅延読み込みを既に追加しました 。
"delayhlp.cpp" (DLL ロード ヘルパーのサンプル実装)__HrLoadAllImportsForDll
では、ライターが標準 C ライブラリ (MSVCRT) 関数の使用を避けていることがわかりました。サンプル DLL ロード ヘルパーによって呼び出されるハンドラー関数で同じことを行う必要がありますか?
筆者の理由は、誰かが MSVCRT 自体を遅延ロードしようとする可能性があるためだと思います。私はこれをするつもりはありません。MSVCRT 関数を使用しても安全でしょうか?
背景情報 サード パーティの DLL を遅延ロードする理由は、2 つのバージョン間で関数のシグネチャが変更されているためであり、どちらかのバージョンを使用してプログラムを実行する必要があります。次に、単純なラッパー関数を提供して、DLL の関数シグネチャを必要なものに適合させます。この関数は、失敗した__pfnDliFailureHook2
ときに Delay-Load Handler ( )によって登録されGetProcAddress
ます。
いくつかのテスト。ハンドラ関数の先頭にブレークポイントを追加しました。ブレークポイントに到達するmsvcrt.dll
と、 msvcr90d.dll
(Visual Studio の [モジュール] ペインから) などは既に読み込まれていることがわかりました。CRT 関数を安全に呼び出すことができるということですか?