Использование скомпилированной .net dll внутри собственного С++

как я понимаю, любая программа .NET компилируется в MSIL, который передается в CLR, который компилирует ее в ассемблерный код и вместе с помощью JIT выполняет ее.

Мне было интересно, поскольку .NET является оболочкой API-интерфейса win32, а CLR в конечном итоге преобразует MSIL в программу сборки. Разве я не могу написать некоторые функции на C #, преобразовать в dll, а затем использовать инструмент, который делает его полным независимым файлом .net для использования внутри неуправляемого кода, например, в C или C++.

Я говорю об Interops и COM? Разве эта идея не отличается от нее? Моя цель - запустить .NET dll на машине, не имеющей .NET framework.


person Anirudh Goel    schedule 12.05.2009    source источник


Ответы (5)


Вы можете использовать генератор собственных изображений (Ngen.exe) для компиляции библиотеки DLL MSIL в библиотеку DLL с собственным кодом, но это не позволит вам запустить ее в системе без .NET Framework. У вас по-прежнему будут ссылки на другие библиотеки DLL фреймворка, и даже если вы включите эти DLL, он не будет работать в системе без фреймворка .NET, потому что фреймворк — это больше, чем просто набор библиотек DLL.

person Daniel Brückner    schedule 12.05.2009
comment
Действительно, ngen не может устранить необходимость фактической сборки. Сборка — это больше, чем IL-код. Он содержит метаданные, которые все еще необходимы для запуска. - person mmx; 12.05.2009

В этой статье базы знаний объясняется способ вызова управляемых методов из машинного кода. Однако вам по-прежнему необходимо иметь .NET framework.

person Matthew Flaschen    schedule 12.05.2009

Этот проект позволит вам выполнять неуправляемый экспорт .NET из статических методов.

person Justin Dearing    schedule 22.09.2011

Это не поддерживаемый способ, и многие функции (например, Reflection) полагаются на метаданные, предоставляемые на более высоком уровне, чем необработанный машинный код. Есть некоторые программы (называемые компоновщиками .NET), которые могут помочь, но они не на 100% надежны.

person mmx    schedule 12.05.2009

Если вы покопаетесь в Интернете, я думаю, что есть ряд инструментов для «компиляции» сборок/кода .NET, чтобы устранить их потребность в фреймворке. Не знаю, насколько хорошо они работают....

person kenny    schedule 12.05.2009