0

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 関数を安全に呼び出すことができるということですか?

4

1 に答える 1

1
        // Check to see if it is the DLL we want to load.
        // Intentionally case sensitive to avoid complication of using the CRT
        // for those that don't use the CRT...the user can replace this with
        // a variant of a case insenstive comparison routine.
        //

CRT を使用しない人にとっては、より関連性の高いコメントです。問題はありません。CRT は常にスタートアップ コードによって読み込まれます。

于 2011-05-27T00:51:33.790 に答える