Где я могу инициализировать управляемую С++/CLI DLL?

Что есть, или я должен спросить, есть ли эквивалент DllMain при создании DLL с использованием С++/CLI?

Существуют ли какие-либо ограничения на то, что нельзя вызвать из этого кода инициализации?

Ответ 1

Дэн: Что касается блокировки загрузчика, загрузки С++/CLI задержки CLR и правильной инициализации двоичного файла смешанного режима, я только что опубликовал вчера на тему здесь.

Более или менее, если у вас есть двоичный файл смешанного режима, вы не должны запускать управляемый код, пока вы находитесь в DllMain().

Ответ 2

С .NET 2.0 у вас есть "инициализатор модуля". См. здесь для получения дополнительной информации о том, как это решает проблему блокировки загрузчика и также здесь

Для прямого ответа на ваш вопрос эта страница цитирует стандарт, который гласит: "Нет ограничений на то, какой код разрешен в инициализаторе модуля. Инициализаторы модулей разрешены для запуска и вызова как управляемого, так и неуправляемого кода".

Ответ 3

Если вы используете DLL в другом управляемом проекте (например, приложение aС#), вам не нужно ничего делать... Пока классы, к которым вы пытаетесь получить доступ, являются классами ref, вы можете доступ к ним из любого другого управляемого приложения.

Ответ 4

Одно из гигантских преимуществ DLL.Net заключается в том, что они избегают блокировки загрузчика. Один побочный эффект - отсутствие DllMain.