CRT инициализация и DLLMain

Цитаты:

Из документа «Рекомендации по созданию библиотек DLL»http://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/DLL_bestprac.doc Microsoft:

«DLL часто имеют сложные взаимозависимости, которые неявно определяют порядок их загрузки. Загрузчик библиотеки эффективно анализирует эти зависимости, вычисляет правильный порядок загрузки и загружает библиотеки DLL в этом порядке».[1]

«(в DLLMain) Используйте функцию управления памятью из динамического C-Run-Time (CRT). Если CRT DLL не инициализируется, вызовы этих функций могут вызвать сбой процесса».[2]

Из MSDN:http://msdn.microsoft.com/en-us/library/988ye33t.aspx

«Функция _DllMainCRTStartup делает несколько вещей, включая вызов _CRT_INIT, который инициализирует библиотеку времени выполнения C / C ++ и вызывает конструкторы C ++ для статических, нелокальных переменных. Без этой функции библиотека времени выполнения оставалась бы в неинициализированном состоянии «.[3]

«В дополнение к инициализации библиотеки времени выполнения C _DllMainCRTStartup вызывает функцию с именем DllMain».[4]

Вопросы:

Если ваша DLL зависит от CRT DLL, на основе[1], Библиотеки CRT будут загружены первыми (будут инициализированы первыми), так как[2] могло случиться ?

На основе[3] а также[4], _DllMainCRTStartup вызовет _CRT_INIT, который инициализирует CRT, так как[2] могло случиться ?

Если исполняемый файл загружает вашу DLL с помощью «неявного связывания», _DllMainCRTStartup (и DLLMain) вашей DLL будет вызываться перед точкой входа (mainCRTStartup или WinMainCRTStartup) исполняемого файла на основе[3] - _DllMainCRTStartup вызывает _CRT_INIT, который инициализирует CRT, и mainCRTStartup также собирается инициализировать CRT, так что же на самом деле произошло с CRT?

Если ваша DLL будет загружена до mainCRTStartup, вызов функций CRT в DLLMain или других функций экспорта безопасен или нет?

Кто будет инициализировать библиотеки CRT на самом деле?

Ответы на вопрос(1)

Ваш ответ на вопрос