Где я могу инициализировать управляемую C++/CLI DLL?
Что, или я должен спросить, есть ли эквивалент DllMain при создании DLL с использованием C++/CLI?
Есть ли какие-то ограничения на то, что не может быть вызвано из этого кода инициализации?
4 ответа
Дэн: Что касается блокировки загрузчика, C++/CLI с задержкой загрузки CLR и правильной инициализации для двоичного файла смешанного режима, я только вчера опубликовал эту тему здесь.
Более или менее, если у вас бинарный режим в смешанном режиме, вы не должны запускать какой-либо управляемый код, пока вы находитесь в DllMain()
,
Начиная с.NET 2.0 у вас есть "инициализатор модуля". Смотрите здесь для получения дополнительной информации о том, как это решает проблему блокировки загрузчика, а также здесь
Для прямого ответа на ваш вопрос эта страница цитирует стандарт, который гласит: "Нет ограничений на то, какой код разрешен в инициализаторе модуля. Инициализаторам модуля разрешено запускать и вызывать как управляемый, так и неуправляемый код".
Если вы используете dll в другом управляемом проекте (например, в приложении aC#), вам не нужно ничего делать... Пока классы, к которым вы пытаетесь получить доступ, ref
классы, вы можете получить к ним доступ из любого другого управляемого приложения.
Одним из гигантских преимуществ.Net dll является то, что они избегают блокировки загрузчика. Одним из побочных эффектов является отсутствие DllMain.