Порядок смешанной управляемой / неуправляемой сборки - PullRequest
2 голосов
/ 20 декабря 2011

У меня есть несколько вопросов о порядке инициализации для CLR и CRT для смешанных сборок .NET (т. Е. Имеется в виду смешанные управляемые / неуправляемые сборки C ++).

Так что, если у меня есть файл dll сборки смешанного режимаи загружается через Assembly.Load.Я заметил, что любые статические нативные объекты не будут инициализироваться или вызываться до тех пор, пока сначала не будет вызван некоторый управляемый код.ХОРОШО.Итак, я полагаю, что при запуске код CLR инициализируется первым, а инициализация CRT вызывается последним.Каков порядок отключения?Это первое выключение CRT, а последнее CLR?

Так вот как это происходит?

start of program lifetime

initilialize CLR
...initilialize CRT
...construct native static instances

... program runs....

...shutdown CLR
...destruct native static instances
shutdown CLR

end of program lifetime

Или это в каком-то другом порядке?

Мой вопростакже применяется к сборкам смешанного режима, которые являются исполняемыми файлами (то есть .exe).Это похоже?

start of program lifetime

initilialize CLR
...initilialize CRT
...construct native static instances

... program runs....

...shutdown CLR
...destruct native static instances
shutdown CLR

end of program lifetime

1 Ответ

2 голосов
/ 20 декабря 2011

Это описано на странице MSDN для Инициализация сборок в смешанном режиме .

Это на самом деле противоположность вашей идеи. Собственный код инициализируется сначала , а затем управляемым кодом. Вам не разрешен доступ к любому управляемому коду внутри DllMain.

Порядок процесса демонтажа явно не задокументирован в MSDN и явно не задокументирован в спецификациях C ++ / CLI. Я полагаю, что это зависит от реализации и рассматривается в разделе «Недокументированное поведение», касающемся взаимодействия между нативными и управляемыми библиотеками приложения.

...