2016-08-21 7 views
1

C++/CLI의 .NET 프로그래밍에서 documentation을 읽었으며 C 또는 C++를 컴파일 할 수 있다는 것을 높은 수준에서 이해합니다. .NET MSIL. 또한 네이티브 구조가이 과정에서 번역된다는 것을 알고 있습니다.C++/CLI를 사용하여 C/C++ 프로그램을 .NET 휴대용 클래스 라이브러리로 컴파일 할 수 있습니까?

질문은 C++/CLI를 사용하여 .NET Framework 클래스 라이브러리로 C/C++ 코드베이스를 컴파일 할 수 있습니까? 의도는 다양한 플랫폼에서 결과를 사용하는 것입니다. Xamarin 플랫폼과 UWP.

편집 : C++이 아닌 일반 C에서이 작업을 쉽게 수행 할 수 있습니까?

+1

아니요. C++/CLI에 대해 "이식성"이 없으며 초기화 된 CRT를 얻으려면 모듈 초기화 프로그램이 필요하며 .NETCore는 제거됩니다. 모든 대상을 제거하면 Windows와 프레임 워크의 정식 버전이 필요합니다. 언어는 종종 WinRT (일명 UWP)를 지원하는 언어 확장 인 C++/CX와 혼동되며, 구문은 매우 유사합니다. 그러나 순전히 원주민입니다. 이러한 언어 확장은 네이티브 C++를 외부 유형 시스템과 인터페이스하는 동일한 문제를 해결하므로 매우 비슷하게 보입니다. –

+0

한스, 좋은 지적. CRT 요구 사항을 해결할 수 있습니까? 즉, CLR 라이브러리를 호출하는 CRT 함수 만 구현할 수 있습니까? – bright

+0

기계에 CRT 소스 코드가 있습니다. 그런 계획이 절대로 어디에도 가지 않을 것이라는 확신을 주어야합니다. –

답변

0

짧은 대답 : AFAIK no.

긴 대답 :

지금까지 내가 C++/CLI 소스 코드는 "혼합"모드로 컴파일 알고있다. 즉, C++/CLI 언어를 배우고이를 사용하여 관리되는 클래스를 만들면 기본적으로 .NET에서 실행됩니다. 좋습니다. 그러나 단순히 기존 C++ 코드를 가져 와서 컴파일하면 그 결과는 다른 플랫폼에서 사용할 수없는 고유 x86/Windows 코드입니다. 컴파일러는 네이티브 및 .NET IL 코드를 단일 실행 파일에 저장하기 때문에 "혼합"이라고합니다.

C++/CLI는 Windows의 .NET 프로그램의 일부로 기존 C++ 코드 을 사용하려는 상황에서 주로 사용됩니다. 따라서 C++/CLI로 라이브러리를 만들고 관리되는 C++/CLI에서 인터페이스를 생성합니다. 이 관리되는 C++/CLI 인터페이스는 네이티브 C++ 코드와 나머지 .NET 프로그램 사이의 다리 역할을합니다.

또한 내가 아는 한 C++/CLI는 일반적으로 CoreCLR에서 지원되지 않습니다.

+0

나는 그것이 정확하다고 생각하지 않는다 -/clr : pure 컴파일러 스위치를 찾는다. 궁금한 점은 결과적으로 MSIL을 휴대용 클래스 라이브러리에 (쉽게 또는 다른 방법으로) 패키징 할 수 있는지 여부에 관한 것입니다. – bright

+0

C++의 하위 집합 만 clr : pure 모드로 컴파일 할 수 있습니다. 질문은 : 코드가 성공적으로 컴파일 되었습니까? –

+0

질문은 접근 방식이 일반적으로 건전한 것인지 여부에 관한 것입니다. 접근법에 대한 경고 또는 제한 사항이있는 경우 대답을 통해 문제를 논의 할 수 있습니다. 그것이 그대로, 귀하의 대답은 사실 부정확합니다 - 그것은 원시 코드를 피할 수있는 방법이 없다고 말합니다 - 그래서 수정하거나 제거해야합니다. – bright