Могу ли я использовать функции MSVCRT в моей функции DLL Delay-Load Handler? - PullRequest
0 голосов
/ 27 мая 2011

Я уже добавил задержку загрузки в свой проект, используя инструкции в http://msdn.microsoft.com/en-us/library/151kt790.aspx

В "delayhlp.cpp" (пример реализации помощника загрузки DLL) __HrLoadAllImportsForDll я увидел, что писатель избегает использования каких-либо функций стандартной библиотеки C (MSVCRT). Нужно ли делать то же самое в моей функции-обработчике, которая будет вызываться вспомогательным помощником загрузки DLL?

Я думаю, что причина автора в том, что кто-то может попытаться отложить загрузку MSVCRT. Я не собираюсь этого делать. Будет ли тогда безопасно использовать функции MSVCRT?

Справочная информация. Причина задержки загрузки сторонней библиотеки DLL заключается в том, что между двумя версиями произошла смена сигнатуры функции, и мне нужно запустить мою программу, используя любую версию. Затем я предоставляю простую функцию-обертку, чтобы адаптировать сигнатуру функции DLL к нужной. Эта функция регистрируется обработчиком отложенной загрузки (__pfnDliFailureHook2), когда GetProcAddress не удается.

Некоторое тестирование. Я добавил точку останова в начале своей функции обработчика. Я обнаружил, что при достижении точки останова msvcrt.dll и msvcr90d.dll и т. Д. Уже загружены (из панели модулей Visual Studio). Значит ли это, что я могу безопасно вызывать функции CRT?

1 Ответ

1 голос
/ 27 мая 2011
        // 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 всегда загружается кодом запуска.

...