.NET 프레임 워크와 함께 C ++를 사용할 수 있습니까?


18

C # 및 C ++에서 GUI 프로그래밍에 대한 많은 의견을 읽었습니다. 그리고 Microsoft의 .NET 프레임 워크가 GUI 프로그래밍에 강력하다는 것을 알았습니다. C ++ 및 .NET 프레임 워크를 사용할 수 있습니까?

C ++은 강력한 언어이므로 .NET 프레임 워크는 Windows의 GUI 프로그래밍에 선호됩니다. C #으로 GUI를 작성하고 C ++로 기능을 작성할 수 있습니까?


7
C #은 또한 매우 강력한 언어입니다.
Adam Crossland

2
@Ramhound : C ++ / CLI가 C #만큼 강력하다는 것은 사실이 아닙니다. C ++ / CLI 코드에는 C ++ 컴파일러의 모든 최적화가 포함되어 있으며 더 빠르게 실행할 수 있으며 C #에없는 많은 메타 프로그래밍 및 전 처리기 기술이 포함되어 있습니다.
DeadMG

2
또한 C ++에 능숙하다면 C #을 선택하는 것이 어렵지 않습니다. 나는 말하는 것이 아니라 말하는 것입니다.
Rig

4
C ++을 알고 있다면 C ++ / CLI 또는 C # 학습 중에서 선택할 수 있습니다. 실제 C ++도 아닙니다. C ++ / CLI로 작업하는 대신 C #을 배우는 것이 좋습니다. C ++ / CLI는 어디에서나 모국어가 아니므로 C #에 대한 많은 책과 지원을 찾을 수 있습니다.
David Thornley 2012

6
@ddacot 아니, C ++가되지 의미 모두에서 게임 개발을 위해. 다른 모든 프로그래밍 언어와 마찬가지로 소프트웨어 개발을위한 것입니다. 게임은 일종의 소프트웨어 일뿐입니다.
MattDavey 2013

답변:


21

예, 이전에는 Managed C ++ 로 알려져 있으며 이제는 C ++ / CLI 입니다. 다른 세 가지 번들 관리 언어 인 C #, F # 및 VB.NET에서와 같이 .NET Framework (GUI : WinForms, GDI + 등) 전체에 액세스 할 수 있습니다.


+1 제시의 대답. 내가 실수하지 않으면 C ++ / CLI는 다중 상속을 지원하지 않습니다. 따라서 예기치 않은 기능에 대비하십시오. 이러한 기능 중 일부는 CLI의 한계에서 비롯되었습니다. 사용하기 전에 C ++ / CLI와 '클래식'C ++의 차이점을 찾아 보는 것이 좋습니다.
Igor Soloydenko 2019

이것은 첫 번째 링크에서 자세히 설명됩니다. "C ++는 시간이 지남에 따라 많은 발전을 거쳤으며 언어로 작성된 대부분의 소프트웨어는 객체 지향적입니다. 관리되는 C ++ 및 클래스 및 클래스 기반 객체의 사용은 Visual C ++에서와 같이 널리 퍼져 있습니다. Managed C ++의 유일한 주요 변경 사항 다중 상속 기능은 지원되지 않습니다. 이는 CLR의 제한 때문입니다. CLR의 가비지 수집기에서 관리되는 클래스는 둘 이상의 클래스를 상속 할 수 없습니다. "
Jesse C. Slicer

괜찮아. 사실, 나는 C ++에 좋지 않습니다. 방금 문제를 일으킬 수있는 또 다른 중요한 차이점이있을 수 있다고 생각했습니다.
Igor Soloydenko

내가 어떤 C ++를 쓴 마지막 시간은 말 그대로 언젠가 :) 지난 세기에 있었다
제시 C. 슬라이서

1
@keykeeper, C ++ / CLI의 일반적인 사용은 관리되지 않는 C ++ 라이브러리와 관리되는 세계 사이의 얇은 다리입니다. 그러한 용도로는 충분하다. 물론 크기가 큰 것을 코딩하는 것은 의미가 없습니다.
SK-logic

6

유닉스 세계에서 일반적으로 사용되는 가장 유연하고 간단한 옵션을 잊지 말고 어떤 이유로 Windows에서는 일반적이지 않습니다. GUI와 논리를 다른 프로세스로 분할하고 합리적인 형태의 RPC를 통해 통신 (예 : 파이프) 작업). 사람이 읽을 수있는 간단한 텍스트 프로토콜을 사용하는 것이 좋습니다.

이 방법을 사용하면 원하는 기술로 GUI (또는 다양한 GUI)를 구현하고 C ++, 스크립트 등의 필요에 맞는 논리 구성 요소를 작성할 수 있습니다.

내가 잘 모르는 것 같아요 어떤 윈도우 세계에서 모 놀리 식 설계 방식의 합리적인 장점.


4

몇 년 전에 한 번 Managed C ++ 시대에 이것을했습니다. 우리는 C #으로 작성된 마법사 스타일 GUI에 통합하고자하는 관리되는 DLL에 일부 비즈니스 로직이있었습니다. 이를 위해 관리되는 GUI 앱과 관리되지 않는 DLL 사이에 위치하도록 관리되는 C ++ 어셈블리를 만들고 해당 어셈블리 내에서 System :: Runtime :: InteropServices :: Marshal을 사용하여 값을 관리되는 유형 (System :: Int32)에서 관리되지 않는 값으로 변환했습니다. 유형 (int) 및 그 반대입니다.

Managed C ++는 더 이상 사용되지 않는 것으로 보이지만 동일한 주체가 C ++ / CLI에 적용될 수 있습니다.


3

실제로는 아닙니다. 하이브리드 언어 C ++ / CLI가 있지만 상호 운용성에만 유용합니다 (Microsoft의 공식 정책). .NET 프레임 워크가 설계되는 방식으로 인해 CLR에서 실행하기에 적합하지 않은 언어 의미론이 많이 있으며 C ++은 그 중 많은 것을 전시합니다.


7
나는이 진술에 동의하지 않습니다. C ++ / CLI는 많은 구현에 완벽하게 적합합니다.
Ramhound

3
@Ramhound : Microsoft는 상호 운용을 위해서만 권장합니다. 이것이 그들의 공식 정책입니다.
DeadMG

2
@DeadMG 소스를 제공 할 수 있습니까?
sq33G

1
@DeadMG, 당신이 틀렸다. 기본 논리를 사용하여 .NET GUI를 실행하는 옵션이 너무 많습니다.
SK-logic

2
@DeadMG-Microsoft의 공식 정책 (1 분 동안은 믿지 않음)이라는 증거를 제공하지 않으면 FUD를 지나는 것
Ramhound

3

C ++ / CLI 각도는 지금까지 많은 답변으로 다루어졌지만 PInvoke를 사용하는 또 다른 방법입니다. 이를 통해 C # 프로그램은 C ++로 작성된 dll에 포함 된 함수를 호출 할 수 있습니다. PInvoke의 장점은 dll이 .Net에서 호출된다는 사실에 대해 완전히 무관심하다는 것입니다. 즉, 소스 코드가없는 dll을 호출 할 수 있으며 소스 코드를 작성한 경우에도 / clr 옵션을 사용하여 다시 컴파일 할 필요가 없습니다. 즉,이 dll을 다른 C ++ 프로그램 및 C # 프로그램과 함께 사용할 수 있습니다. 환상적인 C / C ++ 라이브러리가 있습니다. PInvoke를 사용하면 이러한 기능을 활용할 수 있습니다. 때때로 Win32 라이브러리는 .Net에서는 사용할 수없는 기능을 제공합니다. PInvoke를 사용하면이 기능을 사용할 수 있습니다.

PInvoke 사용의 가장 까다로운 부분 중 하나는 관리되지 않는 서명을 관리되는 서명으로 변환하는 방법을 아는 것입니다. 그러나 이를 도와 줄 치트 시트 가 있습니다.


그러나 P / C를 직접 호출 할 때는 맹 글링을 인식하거나 그 사이에 얇은 C 래퍼를 제공하는 것이 좋습니다.
SK-logic

0

COM (Component Object Model)을 통해 C # 딜로 작업 할 수도 있습니다. Visual Studio 2010에는 Managed C ++에 대한 지능이 없으므로 COM은 Managed C ++를 사용하는 것보다 낫습니다. 내 경우에는 이미 큰 C ++ 응용 프로그램이 있지만 MFC에서 WinForms 또는 WPF로 이동하려고했습니다.

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