C ++ / CX 및 C ++ / CLI 란 무엇이며 C ++ 및 WinRT와 어떤 관련이 있습니까?


31

Metro 앱을 디자인하기 위해 C ++을 배우는 데 어려움을 겪고 있었으며 C ++ / CX를 접하게되었습니다.

Metro 앱을 C ++ 11로 코딩 할 수 있습니까? 작동하려면 C ++ / CX가 필요합니까? 그리고 C ++ / CX 란 정확히 무엇입니까? C ++ 만 사용하여 Metro 앱을 만들 수 있습니까? 아니면 C ++ / CX가 필요합니까? 또한 C ++ / CLI는 어떻게이 그림과 연계됩니까?


또한 C ++ / CX의 사용은 권장하지 않습니다 (C ++ / WinRT가 선호 됨) . 문서
SWdV

답변:


28

Microsoft는 단순히 Windows API (win32)에 액세스 할 수있는 C ++ 시스템을 만든 다음 어느 날 .NET을 발명하고 모든 것이 바뀌어야한다고 생각했습니다.

따라서 기본적으로 C ++이지만 많은 비표준 확장명을 가진 "Managed Extensions for C ++"를 만들었습니다. __gc.NET 기능을 지원하는 것과 같은 키워드를 추가했습니다 (예 : 기본 기능이 아닌 GC 힙에 할당).

정말 년후 그러나 사람들이 좋아하지 않았다; t의 C ++, 모든 여분의 키워드를 가지고, 마이크로 소프트가 재 설계와 C는 같은 구문의 변경 내용을 추가 키워드의 더 작은 세트를했지만, 도입 / CLI, ++라고 불렀다 그래서 ^(인 GC 힙의 .NET 객체에 대한 '포인터'참조).

몇 년 후, Microsoft는 .NET이 자신들이 말한 최고의 총알이 아니라는 사실을 깨달았으며, 싸우는 Windows 및 개발자 팀도 합병했습니다. 이 재평가의 일환으로 WinRT라는 새로운 Windows API를 만들었습니다. WinRT는 전적으로 고유 코드이며 이전 확장은 더 이상 유용하지 않았기 때문에 Microsoft는 C ++ 확장을 새로운 작업과 호환되도록 개발했습니다. C ++ / CLI (예 : ^)에서 몇 가지 확장을 유지함으로써 WinRT API가 더 쉬워집니다.

따라서 C ++ 인 확장 C ++의 3 가지 버전이 있습니다. 최소한 최신 버전은 다시 네이티브 코드이므로 API에 직접 액세스 할 수 있기를 원하지 않으면 확장을 사용할 필요가 없습니다 (WRL이라고하며 이전 ATL 템플릿 클래스와 매우 유사합니다)

크로스 플랫폼 코드를 코딩하고 싶지 않다고 생각되면 API 호출을 변경할 수 있지만 ^Visual C ++ 이외의 컴파일러 에서는 사용할 수 없습니다 . C ++ / CX와 비교하여 작성해야하는 '추가 코드'가 그리 크지 않은 경우 WRL API를 사용하고 코드를 가능한 한 표준으로 유지하는 것이 좋습니다.


참고 : C ++ / CX는 끝까지 언급되지 않습니다. 어느 단락에 있는지 명확하게 말하면 좋을 것입니다.
도토리

11

인용 http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx :

. . . C ++ / CX는 문법적으로 C ++ / CLI와 유사하므로 여러면에서 거의 동일하게 보이지만 의미 상 상당히 다릅니다. C ++ / CX 코드는 네이티브 코드이며 CLR이 필요하지 않습니다. C ++ / CLI에서의 프로그래밍은 두 가지 매우 다른 객체 모델을 결정적으로 병행해야하기 때문에 매우 어려울 수 있습니다. 결정적 객체 수명을 갖는 C ++ 객체 모델과 가비지 수집 CLI 객체 모델입니다. COM을 기반으로하는 Windows 런타임은 C ++ 프로그래밍 언어에 매우 잘 매핑되므로 C ++ / CX는 작업하기가 훨씬 간단합니다.

Windows 런타임은 비교적 간단한 저수준 ABI (Application Binary Interface)를 정의하고 구성 요소가 공통 메타 데이터 형식을 사용하여 유형을 정의하도록 요구합니다. C ++ / CX는 기본 Windows 런타임 구성 요소를 작성하는 데 반드시 필요한 것은 아닙니다. C ++ / CX 언어 확장을 사용하지 않고 C ++를 사용하여 Windows 런타임 구성 요소를 작성할 수 있으며 Visual C ++ 2012에는 라이브러리 인 Windows 런타임 C ++ 템플릿 라이브러리 ( WRL)를 사용하여이 작업을보다 쉽게 ​​수행 할 수 있습니다. Windows의 일부로 제공되는 많은 Windows 런타임 구성 요소 (Windows 네임 스페이스)는 WRL을 사용하여 작성됩니다. C ++ / CX에는 마법이 없습니다. C ++로 Windows 런타임 구성 요소를 작성하는 것이 훨씬 간단하고 WRL과 같은 라이브러리 기반 솔루션을 사용할 때 작성해야하는 반복적이고 자세한 코드의 양을 줄이는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.