Где я могу инициализировать управляемую C ++ / CLI DLL? - PullRequest
4 голосов
/ 02 декабря 2008

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

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

Ответы [ 4 ]

4 голосов
/ 19 мая 2009

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

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

3 голосов
/ 06 февраля 2010

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

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

1 голос
/ 12 декабря 2008

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

0 голосов
/ 12 декабря 2008

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

...