-
guav © (06.07.08 12:02) [20]Можно сказать, что все статически импортированные dll загрузятся до кода ехе, однако с порядком их загрузки сложнее. Так, в своей DllMain не рекомендуют вызывать код работы с реестром, потому что advapi32.dll может быть загружена и позже (здесь http://www.microsoft.com/whdc/driver/kernel/DLL_bestprac.mspx ).
Теперь по сути. Для dll здесть http://support.microsoft.com/kb/94248 в Section 2 описана возможность объявить точку входа в dll не как DllMain, а как DllEntryPoint, при этом инициализация CRT и вызов конструкторов глобальных объектов будет делаться явным вызовом _CRT_INIT. Разумеется, можно что-то своё сделать до _CRT_INIT, не используя при этом CRT.
ДУмаю что-то подобное возможно и для ехе. -
guav © (06.07.08 12:06) [21]http://msdn.microsoft.com/en-us/library/f9t8842e(VS.71).aspx
The function must be defined with the __stdcall calling convention. The parameters and return value must be defined as documented in the Win32 API for WinMain (for an .exe file) or DllEntryPoint (for a DLL). It is recommended that you let the linker set the entry point so that the C run-time library is initialized correctly, and C++ constructors for static objects are executed.
Насколько я понял, можно не сделать то что recomended и инициализировать CRT явно. -
Игорь Шевченко © (06.07.08 14:26) [22]
> Началось все с того, что мне понадобился класс(структура)
> в С++, который
> инициализируется "самым первым" и последним финализируется.
>
AppInit_DLLs для этого не подходит