새 C ++ 프로젝트에 ATL, MFC, Win32 또는 CLR을 사용할지 어떻게 결정합니까?
방금 첫 번째 C ++ 프로젝트를 시작하고 있습니다. 내가 사용하고 비주얼 스튜디오 2008 . 두 개의 데이터베이스에 액세스하고 WebSphere MQ 트랜잭션을 시작하는 단일 양식 Windows 애플리케이션입니다. 나는 기본적으로 ATL, MFC, Win32 (실제로는 약간 흐릿합니다)와 CLR의 차이점을 이해하지만 어떻게 선택 해야하는지에 대해서는 손실이 있습니다.
이들 중 하나 이상이 이전 버전과의 호환성을 위해 존재합니까?
CLR 은 나쁜 생각 입니까?
어떤 제안이라도 감사합니다.
편집 : 이 프로젝트를 위해 C ++를 선택했습니다.이 포스트에 들어 가지 않은 이유는 완전히 기술적 인 것이 아닙니다. 그렇다면 C ++가 유일하고 최선의 옵션 이라고 가정하면 어떤 것을 선택해야합니까?
귀하의 필요에 따라 다릅니다.
CLR을 사용하면 실행 파일을 런타임에 설치해야하는 .NET 프레임 워크로 제한하고 Windows 플랫폼으로 제한하는 대신 가장 표현력이 뛰어난 라이브러리 세트 (전체 .NET 프레임 워크)를 제공합니다 ( 그러나 나열된 4 개의 기술은 모두 Windows 전용이므로 플랫폼 제한은 아마도 가장 문제가 적습니다.)
그러나 CLR을 사용하려면 C ++ 언어에 대한 C ++ / CLI 확장을 사용해야하므로이 기능을 사용하려면 몇 가지 추가 언어 기능을 배워야합니다. 이렇게하면 .net 라이브러리에 대한 액세스, 전체 가비지 수집 등과 같은 많은 "추가 기능"이 제공됩니다.
ATL과 MFC는 결정하기가 다소 까다 롭습니다. 그들 사이에서 결정하기 위해 MSDN 페이지를 선택하여 참조하겠습니다 . ATL / MFC의 좋은 점은 .NET 프레임 워크가 필요하지 않고 배포를 위해 VC / MFC 런타임 만 설치하면된다는 것입니다.
Win32를 사용하면 종속성이 가장 적은 가장 작은 실행 파일이 제공되지만 작성하는 데 더 많은 작업이 필요합니다. 도우미 라이브러리가 가장 적기 때문에 코드를 더 많이 작성하고 있습니다.
Win32는 원시적 인 베어 메탈 방식입니다. 지루하고 사용하기 어려우며 기억해야 할 사소한 세부 사항이 많이 있습니다. 그렇지 않으면 일이 상대적으로 신비한 방식으로 실패합니다.
MFC는 Win32를 기반으로하여 응용 프로그램을 빌드하는 개체 지향 방식을 제공합니다. Win32를 대체하는 것이 아니라 개선 된 기능입니다. 많은 노력이 필요합니다.
System.Windows.Forms (CLR에서 의미하는 것임)는 완전히 다르지만 기본 구조에서 MFC와 큰 유사점을 가지고 있습니다. 사용하기 가장 쉽지만 .NET 프레임 워크가 필요하며 이는 귀하의 경우에 방해가 될 수도 있고 아닐 수도 있습니다.
내 권장 사항 : .NET을 피해야하는 경우 MFC를 사용하고 그렇지 않으면 .NET을 사용합니다 (사실이 경우 작업하기가 훨씬 쉽기 때문에 C #을 사용합니다).
C ++이 진행되는 한 WTL을 사용합니다. 가볍고 의존성이 적어 배송 및 설치가 쉽습니다. 내 앱이 대부분의 Windows 버전에서 실행되는 단일 EXE로 구성되어있을 때 매우 만족 스럽지만 이는 문제가되지 않을 수 있습니다.
대신 .NET을 선택하면 C #이 거의 확실하게 사용할 수 있습니다.
WTL에 대한 추가 정보 :
http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx
왜 C ++에서이 작업을 수행하는지에 대해 매우 궁금합니다. 간단한 설명에 따르면 C #은 훨씬 더 적절한 선택처럼 들립니다.
좀 더 자세히 설명하기 위해 C ++ CLR을 설명하는 링크를보십시오. 최고 평점을받은 답변은 C ++가 "커널, 게임, 고성능 및 서버 앱"에 적합하다는 점을 (정확히 제 생각에는) 언급합니다. 어느 것도 당신이하는 일을 설명하지 않는 것 같습니다.
MFC, ATL 등은 향후 버전의 Visual Studio에서 앱을 컴파일하고 향후 버전의 Windows에서 실행할 수 있다는 의미에서 지원 될 것입니다. 그러나 CLR 및 C #에서와 같은 방식으로 API 또는 언어에서 진행되는 새로운 개발이 많지 않다는 점에서 지원되지 않습니다.
CLR에는 문제가 없습니다. 다른 사람들과 마찬가지로 C #을 제안하지만 C ++를 고수 할 이유가 있으므로 .NET 프레임 워크를 사용하는 것이 ATL / MFC (IMO)에 익숙하지 않은 경우보다 수천 배 더 쉽습니다.
C ++ / CLR을 사용하는 경우 실제로 C ++를 전혀 사용하지 않는다는 점을 언급 할 가치가 있습니다. C ++ / CLR은 C #처럼 CIL로 컴파일됩니다. 나는 그것을 직접 사용한 적이 없지만 그 목적은 이전 C ++ 실행 파일에서 새 코드 작업을 허용하는 대신 레거시 코드를 컴파일하고 새 .NET 코드에서 쉽게 사용할 수 있도록하는 것입니다. .NET에서 네이티브 코드를 호출하는 다른 방법이 있습니다.
'developer tip' 카테고리의 다른 글
공식 Qt 예제와 튜토리얼에서 스마트 포인터를 사용하지 않는 이유는 무엇입니까? (0) | 2020.11.08 |
---|---|
최상의 이미지 축소 알고리즘 (품질 측면)은 무엇입니까? (0) | 2020.11.08 |
페이지 언로드시 JQuery를 사용한 Ajax 요청 (0) | 2020.11.08 |
Guid.Parse () 또는 new Guid ()-차이점은 무엇입니까? (0) | 2020.11.08 |
Mockito 구문에 대한 가져 오기 정적 문 찾기 (0) | 2020.11.08 |