Какие функции вызываются до DllMain()?
Какие функции вызываются до DllMain()? Если во время инициализации среды выполнения C их больше одного, то порядок важен.
3 ответа
Из источника:-
Если ваша DLL связана с библиотекой времени выполнения C (CRT), точка входа, предоставляемая CRT, вызывает конструкторы и деструкторы для глобальных и статических объектов C++. Следовательно, эти ограничения для DllMain также применяются к конструкторам и деструкторам и любому коду, который вызывается из них.
Это очень зависит от компилятора.
DllMain() имеет точно такое же соглашение о вызовах, что и точка входа DLL, поэтому для некоторых компиляторов DllMain() является точкой входа DLL!
Другие компиляторы используют свою собственную точку входа, где некоторые инициализации DLL выполняются перед входом в DllMain().
В отличие от этого, точка входа в EXE-файл не имеет аргументов, и функция никогда не должна возвращаться. Поэтому функция WinMain() или main () не может быть точкой входа в файл EXE, но должен существовать некоторый подготовительный код, который вызывается перед WinMain() или main().
Я думаю, что вызывается только _DllMainCRTStartup(), который, в свою очередь, вызывает все конструкторы глобальных объектов C++ (в случае C нет) и (я не уверен в этом последний) вызывает DllMain().
Конечно, он также вызывает некоторые функции Kernel32 для инициализации CRT (для начала ему нужно выделить немного памяти и слот TLS).