C # 및 C ++에서 GUI 프로그래밍에 대한 많은 의견을 읽었습니다. 그리고 Microsoft의 .NET 프레임 워크가 GUI 프로그래밍에 강력하다는 것을 알았습니다. C ++ 및 .NET 프레임 워크를 사용할 수 있습니까?
C ++은 강력한 언어이므로 .NET 프레임 워크는 Windows의 GUI 프로그래밍에 선호됩니다. C #으로 GUI를 작성하고 C ++로 기능을 작성할 수 있습니까?
C # 및 C ++에서 GUI 프로그래밍에 대한 많은 의견을 읽었습니다. 그리고 Microsoft의 .NET 프레임 워크가 GUI 프로그래밍에 강력하다는 것을 알았습니다. C ++ 및 .NET 프레임 워크를 사용할 수 있습니까?
C ++은 강력한 언어이므로 .NET 프레임 워크는 Windows의 GUI 프로그래밍에 선호됩니다. C #으로 GUI를 작성하고 C ++로 기능을 작성할 수 있습니까?
답변:
예, 이전에는 Managed C ++ 로 알려져 있으며 이제는 C ++ / CLI 입니다. 다른 세 가지 번들 관리 언어 인 C #, F # 및 VB.NET에서와 같이 .NET Framework (GUI : WinForms, GDI + 등) 전체에 액세스 할 수 있습니다.
유닉스 세계에서 일반적으로 사용되는 가장 유연하고 간단한 옵션을 잊지 말고 어떤 이유로 Windows에서는 일반적이지 않습니다. GUI와 논리를 다른 프로세스로 분할하고 합리적인 형태의 RPC를 통해 통신 (예 : 파이프) 작업). 사람이 읽을 수있는 간단한 텍스트 프로토콜을 사용하는 것이 좋습니다.
이 방법을 사용하면 원하는 기술로 GUI (또는 다양한 GUI)를 구현하고 C ++, 스크립트 등의 필요에 맞는 논리 구성 요소를 작성할 수 있습니다.
내가 잘 모르는 것 같아요 어떤 윈도우 세계에서 모 놀리 식 설계 방식의 합리적인 장점.
몇 년 전에 한 번 Managed C ++ 시대에 이것을했습니다. 우리는 C #으로 작성된 마법사 스타일 GUI에 통합하고자하는 관리되는 DLL에 일부 비즈니스 로직이있었습니다. 이를 위해 관리되는 GUI 앱과 관리되지 않는 DLL 사이에 위치하도록 관리되는 C ++ 어셈블리를 만들고 해당 어셈블리 내에서 System :: Runtime :: InteropServices :: Marshal을 사용하여 값을 관리되는 유형 (System :: Int32)에서 관리되지 않는 값으로 변환했습니다. 유형 (int) 및 그 반대입니다.
Managed C ++는 더 이상 사용되지 않는 것으로 보이지만 동일한 주체가 C ++ / CLI에 적용될 수 있습니다.
실제로는 아닙니다. 하이브리드 언어 C ++ / CLI가 있지만 상호 운용성에만 유용합니다 (Microsoft의 공식 정책). .NET 프레임 워크가 설계되는 방식으로 인해 CLR에서 실행하기에 적합하지 않은 언어 의미론이 많이 있으며 C ++은 그 중 많은 것을 전시합니다.
C ++ / CLI 각도는 지금까지 많은 답변으로 다루어졌지만 PInvoke를 사용하는 또 다른 방법입니다. 이를 통해 C # 프로그램은 C ++로 작성된 dll에 포함 된 함수를 호출 할 수 있습니다. PInvoke의 장점은 dll이 .Net에서 호출된다는 사실에 대해 완전히 무관심하다는 것입니다. 즉, 소스 코드가없는 dll을 호출 할 수 있으며 소스 코드를 작성한 경우에도 / clr 옵션을 사용하여 다시 컴파일 할 필요가 없습니다. 즉,이 dll을 다른 C ++ 프로그램 및 C # 프로그램과 함께 사용할 수 있습니다. 환상적인 C / C ++ 라이브러리가 있습니다. PInvoke를 사용하면 이러한 기능을 활용할 수 있습니다. 때때로 Win32 라이브러리는 .Net에서는 사용할 수없는 기능을 제공합니다. PInvoke를 사용하면이 기능을 사용할 수 있습니다.
PInvoke 사용의 가장 까다로운 부분 중 하나는 관리되지 않는 서명을 관리되는 서명으로 변환하는 방법을 아는 것입니다. 그러나 이를 도와 줄 치트 시트 가 있습니다.