Избегать загрузки .Net Dlls в проект C ++ / CLI? - PullRequest
1 голос
/ 06 октября 2009

У меня есть проект, написанный на C ++ / CLI. Некоторые из типов есть в управляемом коде, а некоторые в полностью нативном коде. Допустим, у меня есть созданная DLL на машине, на которой не установлена ​​ни одна версия .Net framework. Есть ли способ, чтобы другое, собственное приложение связывалось с моей Dll «смешанного режима» и использовало только собственные типы? Я заметил, что как только я добавляю ключ "/ clr", мой Dll автоматически зависит от нескольких .Net Framework Dll (mscorjit, mscoree и т. Д.), И когда я на самом деле пытаюсь использовать 100% собственные типы, определенные в нем, приложение все еще пытается загрузить эти .Net Framework Dlls (хотя я не использую инфраструктуру в этой части кода).
Итак, возможно ли избежать загрузки этих Dll в таком случае? (как я понимаю, другой вариант - создать еще один собственный проект, который будет содержать все собственные типы без управляемых).

Спасибо

1 Ответ

3 голосов
/ 06 октября 2009

Нет. Когда вы загружаете сборку смешанного режима (/ clr), сразу после запуска DllMain, .cctor запускается и инициализирует платформу, если она еще не была настроена для приложения.

Без этого будет большой успех, как только вы вызовете функцию, для которой требуется управляемый API. Дополнительные сведения см. В разделе « Инициализация смешанных сборок » в MSDN.

Наилучшим вариантом было бы сделать собственный API отдельным DLL, а сборку смешанного режима - отдельным проектом, чтобы при необходимости можно было загрузить его отдельно.

...