Какие функции вызываются до 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).

Другие вопросы по тегам