2009-05-12 2 views
1

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

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

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

ответ

0

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

1

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

+0

Действительно, ngen не может удалить необходимость в фактической сборке. Узел больше, чем код IL. Он содержит метаданные, которые все еще необходимы для запуска. –

0

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

1

This KB article объясняет способ вызова управляемых методов из собственного кода. Однако вам все равно необходимо иметь .NET framework.

1

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

Смежные вопросы