2009-05-12 4 views
1

내. NET 컴파일 된 DLL을 사용하여 모든 .NET 프로그램은 어셈블리 코드를 컴파일하는 CLR에 공급되는 MSIL로 컴파일되고 JIT의 도움을 받아 실행됩니다.네이티브 C++

.NET이 win32 API를 둘러싼 래퍼이고 CLR이 궁극적으로 MSIL을 어셈블리 프로그램으로 변환하기 때문에 궁금합니다. C#에서 일부 기능을 작성하고 dll을 만든 다음 C 또는 C++과 같이 관리되지 않는 코드를 사용하기 위해 완전한 .net 독립 파일을 만드는 도구를 사용합니다.

Interops와 COM에 대해 이야기하고 있습니까? 이 아이디어가 다른 아이디어가 아닌가요? 내 목표는 .NET 프레임 워크가없는 컴퓨터에서 .NET dll을 실행하는 것입니다.

답변

0

지원되는 방법은 아니며 Reflection과 같은 많은 기능은 원시 시스템 코드보다 상위 레벨에서 제공되는 메타 데이터에 의존합니다. 도움이 될 수있는 몇 가지 프로그램 (.NET 링커라고 함)이 있지만 100 % 신뢰할 수는 없습니다.

1

Native Image Generator (Ngen.exe)을 사용하면 MSIL DLL을 기본 코드 DLL로 컴파일 할 수 있지만 .NET Framework가없는 시스템에서는 실행할 수 없습니다. 프레임 워크의 다른 DLL에 대한 참조는 여전히 있으며 이러한 DLL을 포함하더라도 .NET Framework가없는 시스템에서는 작동하지 않습니다. 프레임 워크가 DLL 컬렉션 이상이기 때문입니다.

+0

실제로 ngen은 실제 어셈블리를 필요로하지 않습니다. 어셈블리는 IL 코드 이상입니다. 여기에는 실행에 필요한 메타 데이터가 포함되어 있습니다. –

0

웹을 둘러 보시면 프레임 워크의 필요성을 제거하기 위해 .NET 어셈블리/코드를 '컴파일하는'도구가 많이 있다고 생각합니다. 그들이 얼마나 잘 작동하는지 모르겠다 ....

1

This KB article은 네이티브 코드에서 관리되는 메서드를 호출하는 방법을 설명합니다. 그러나 .NET Framework가 있어야합니다.

1

This project 정적 메서드의 .NET을 관리되지 않는 내보내기로 만들 수 있습니다.

관련 문제