420 likes | 840 Views
Visual Studio2008 을 이용한 C++ 코드의 견고한 업그레이드. MFC 업데이트와 표준 라이브러리 확장. 김용현 www.YHKim.com Microsoft MVP Chief Programmer, ESTsoft. 유츠프라카치아. Windows with Native VS .NET. .NET Framework 성공 , 그러나 Native C++ 이 합리적인 경우가 많음 C++ 은 Windows SDK 를 이용해 Windows 의 모든 부분을 자유롭게 엑세스 할 수 있는 유일한 언어
E N D
Visual Studio2008을 이용한 C++코드의 견고한 업그레이드 MFC 업데이트와표준 라이브러리 확장 김용현 www.YHKim.com Microsoft MVP Chief Programmer, ESTsoft
Windows with Native VS .NET • .NET Framework 성공, 그러나 • Native C++이 합리적인 경우가 많음 • C++은 Windows SDK를 이용해 Windows의 모든 부분을 자유롭게 엑세스 할 수 있는 유일한 언어 • VC++ 2008의 업데이트쯤에서 대대적인 업그레이드가 이루어짐
Agenda • Overview on new VC++ • 편리한 사용성 지원 • 추가된 컨트롤 지원 • MFCNext • 표준 라이브러리 확장
Overview • Visual C++ 2008 컴파일러는 OOO를 지원 • CLR(Common Language Runtime) • x86, x64, Itanium • 최적화 지원 • Visual C++ 2008 라이브러리는 OOO를 지원 • ATL, MFC, Standard C++ Library, STL, C Runtime Library, STL/CLR http://msdn2.microsoft.com/en-us/library/60k1461a.aspx
Vista Style Guidelines • ATL, MFC, Win32에서 생성되는 다이얼로그는 Vista style 가이드라인이 반영이 됨
Vista Style Guidelines • Aero 테마, 공용컨트롤, 공용 다이얼로그,작업관리자, Glass 효과, Aero Wizard, 시스템 폰트, 검색 상자, 에러메시지 다이얼로그, … • 비스타 지원 • 새로운 컨트롤, 이벤트, Notification, 스타일에 대한 MFC 지원
Class Designer • 2005에서 .NET 지원 언어들에게 지원되어졌음 • Office등과 쉽게 연동되며 클래스 drag-drop 등으로 쉽게 사용 • 아쉽게, Read Only
Class Designer class A { }; class CCustomClass: public A { public: int a; int b; private: int c; int d;};
IDE의 향상 • Solution Load Performance 향상 • Editor Responsiveness 향상 • IntelliSense Responsiveness 향상 • NCB파일의 동기화 부분 수정 • 더 이상 코딩을 멈추는 방해를 하지 않음 • 최악의 상황에서도 CPU사용률이 90%미만 • 프로젝트 사이즈가 XXL라도 유연하게 동작
병렬 Unit 컴파일옵션 {/MP(n)} • CPU가 병렬적으로 프로젝트 컴파일 • Tools > Options > Project and Solutions > Build and Run > parallel project builds 에서 병렬적 빌드 프로젝트의 개수 선택 가능 • Dependency가 있는 프로젝트는 적용이 안됨 • 실제 프로젝트 운용상 유명무실, 복배지모! • /MP(n) switch • 빌드의 프로세스의 개수를 Hard Coding할 수 있음 • Cpp등의 유닛단위로 적용 • 셋팅에 따라 30% 상하이상 콤비네이션 효과
보안을 위한 컴파일러 옵션 • ASLR(Address Space Layout Randomization) • 라이브러리적재위치, 스택, 힙의 시작위치를 랜덤화 • /DYNAMICBASE • DEP(Data Execution Prevention) • Execute Disable, Enhanced Virus Protection • 폰노이만구조의 한계 • /NXCOMPACT
IDE의 비스타 지원 • 비스타에서 VS2005 개발환경을 꾸미면 번거로운 과정이 들어감 • Hotfix for VS2005 – ENU(KB929470) 제거 • VS2005 ServicePack1 with Vista 설치 • Run as Administrator 로 수행을 권장 • 간단한 테스트 애플리케이션을 작성할 때도 뜨는 UAC가 상당히 신경 쓰임 • VS2005 자체가 Vista 애플리케이션 개발 가이드라인에 맞지 않는 애플리케이션이 되어 버림
IDE의 비스타 지원 • 처음부터 Run as Administrator 불필요 • User 권한에서도 개발 가능 • Administrator 권한이 필요할 때만 UAC를 통해 권한 획득
UAC 지원하기 – OLD WAY #define MANIFEST_RESOURCE_ID 1 MANIFEST_RESOURCE_ID RT_MANIFEST “AdminApp.exe.manifest” mt.exe -manifest 1.manifest 2.manifest -outputresource:MyApp.exe <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfoxmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </assembly>
UAC 지원하기 – NEW WAY • Project > Properties > Linker > Manifest File • 관련 UI 제공 • /MANIFESTUAC /MANIFESTUAC /MANIFESTUAC:NO /MANIFESTUAC:level={asInvoker| highestAvailable| requireAdministrator} /MANIFESTUAC:uiAccess={true|false}
추가 지원되는 컨트롤 기능 • 커맨드 링크 컨트롤 • 스플릿 버튼 • BS_SPLITBUTTON 설정 • Network Address • IPv4, IPv6, DNS etc.. • 시스템 링크 • 콤보 박스 컨트롤 • 트리뷰 • 다중선택, 더블 버퍼링
그밖의 변경사항 • ATL Server가 CodePlex로릴리즈 됨 • Atlenc, atlutil.h, atlpath.h 지원안함 • Intel Core Architecture 지원 • __cpuid함수 업그레이드 • 최신 버전의 AMD 및 Intel 프로세서의 향상된 기능 지원 • /Wp64, __w64 무효화
CRT,STL의 변경사항 • Windows2000 아래의 운영체제 지원 중단 • Windows 95/98/ME, Windows NT4.0 • CRT의 일부 함수 삭제 • _osplatform, _osver, _winmajor, _winminor, _winver • _get_osplatform, _get_osver, _get_winmajor, _get_winminor, _get_winver • SAL의 문법 변경
AfxBeginMFCIsBack() • 새로 추가된 새로운 Native API 활용 • 깔끔한 사용자 인터페이스 • 새로운 Native API의 래핑을 지원하는 것과 동시에 새로운 컨트롤 및 공용 대화상자 등의 추가 제공 • 150개가 넘는 Method와 18개의 새로운 클래스가 Vista를 feature지원을 위해 더해짐 • 기존 코드보다 성능 향상
MFCNext • MFC의 향상된 기능은 대부분 UI에 집중 • MFC 프로젝트를 VC9에서 다시 컴파일 하면 Windows Vista에 맞게 모양 자동 최적화 EX) bVistaStyle 추가파라미터 전달 CFileDialog dlgFile(TRUE); dlgFile.DoModal();
MFC 9.0에서 새로운 것들 • Visual style Application UI 빌드가 가능 • Microsoft Office • Visual Studio • Internet Explorer • 다양한 UI 구성 요소들 지원 • Toolbar 커스터마이징 • 메뉴, 키, 메뉴바, Docking Panes • 다양한 스킨 지원 • XP, Vista, Office2003, Office2007 (blue, black, aqua…)
새로운 형태 컨트롤 지원 • 막상 구현하려면 막막한 여러 컨트롤 지원
MFC 9.0에서 변화된 것들 • CTime 클래스의 처리 날짜 확장 변경 • ActiveX컨트롤을 삽입후 탭오더 변경 버그 수정 • CFileDialog의 컨트롤 ID가 변경 • CWnd::GetMenuBarInfo 메소드 삭제 • CFrameWnd::GetMenuBarInfo의 Virtual 속성 없어짐 • CHttpServer가 없어짐 • ISAPI(Internet Server Application Programming Interface)를 지원하지 않음 • ANSI MFC 메소드를 Unicode로 변경 권장 • Visual Manager는 MBCS과 Unicode를 모두 지원하지만 Windows Control를 래핑하면서 Unicode만 지원하게 됨
StandardCppLibraryIsExtended() • VS2008에 포함된 TR1항목들 • shared_ptr, weak_ptr • mem_fn(), bind(), and function • 정규 표현식 regex • <random> • Containers (tuple, array, unordered_set , etc.) • <type_traits> • reference_wrapper • 포함되지 않은 항목들 • C99 Compatibility (<cstdint>, etc.) • Special Math Functions (riemann_zeta(), etc.)
Visual Studio 에서 • TR1에 대한정책 • Visual C++ 2005 (VC8)에는 포함시키지 않을 것임 • VC9 Express 버전에는 포함 안됨 • Visual C++ 2008 (VC9) RTM • 별도의 patch를 설치 하면 VC9 RTM에 포함 됨 • VC9 SP1 과 이후 버전에는 포함 됨(VC10, …)
TR1 구성요소 • TR1 의 구성 요소 • <regex>와 같은 새로운 헤더 파일 셋 • <memory>와 같은 기존 헤더의 수정 파일 셋 • msvcp90[d].dll 의 수정 파일 셋 • 기존 콤포넌트들과 분리되어 있는 요소 • 헤더 파일만 추가 한다고 TR1을 사용할 수 없음 • msvcp90[d].dll와 같은 파일과 쌍으로 움직여야 함 • MFC Update와 TR1 Update는 별개임
TR1 differ from Boost • 라이선스 정책 • Boost는 오픈소스, TR1은 DLL Library 정책에 따름 • Boost의 모든 요소가 TR1에 포함 된 것은 아님 • 일부 regex 문법, shared_array … • 최적화 (e.g. vector<shared_tr<T> >) • 기존 STL과 같이 사용할 수 있도록 리포지셔닝 • /clr, /clr:pure, /W4, /Za, /Gz, /anlayze • STL에서 처럼 IDE Debugger Visualizer에서 TR1 type은 강하게 연동됨
추가된 헤더파일 • <array> • <functional> • <memory> • <regex> • <tuple> • <type_traits> • <unordered_map> • <unordered_set> • <utility>
Reference • VC++2008 Feature Pack Beta Documentation • C++ 표준 라이브러리 확장 튜토리얼 및 레퍼런스 - Pete Becker, 지&선 • http://open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf • http://blogs.msdn.com/vcblog • http://channel9.msdn.com/tags/C++ • http://blogs.msdn.com/somasegar
Thank you • 이후 피드백 http://www.devpia.com/MAEUL/Contents/List.aspx?BoardID=4246&MAEULNo=4 • Software Architecture와 Pattern 관련 Study 및Online 토론 • Software Architecture와 Design Pattern관련 Q&A