Visual Studio2008 을이용한 C++ 코드의견고한업그레이드 김용현 www.yhkim.com Microsoft MVP Chief Programmer, ESTsoft
유츠프라카치아 3/12/2008 2
Windows with Native VS.NET.NET Framework 성공, 그러나 Native C++ 이합리적인경우가많음 C++ 은 Windows SDK를이용해 Windows의모든부분을자유롭게엑세스할수있는유일한언어 VC++ 2008의업데이트쯤에서대대적인업그레이드가이루어짐 3/12/2008 3
Agenda Overview on new VC++ 편리한사용성지원 추가된컨트롤지원 MFCNext 표준라이브러리확장 3/12/2008 4
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 3/12/2008 5
Vista Style Guidelines ATL, MFC, Win32 에서생성되는다이얼로그는 Vista style 가이드라인이반영이됨 3/12/2008 6
Vista Style Guidelines Aero 테마, 공용컨트롤, 공용다이얼로그, 작업관리자, Glass 효과, Aero Wizard, 시스템폰트, 검색상자, 에러메시지다이얼로그, 비스타지원 새로운컨트롤, 이벤트, Notification, 스타일에대한 MFC 지원 3/12/2008 7
Class Designer 2005 에서.NET 지원언어들에게지원되어졌음 Office등과쉽게연동되며클래스 drag-drop 등으로쉽게사용 아쉽게, Read Only 3/12/2008 8
Class Designer class A { }; class CCustomClass: public A { public: int a; int b; private: int c; int d;}; 3/12/2008 9
IDE Upgrade 3/12/2008 10
IDE Upgrade 3/12/2008 11
IDE Upgrade 3/12/2008 12
IDE Upgrade 3/12/2008 13
IDE 의향상 Solution Load Performance 향상 Editor Responsiveness 향상 IntelliSense Responsiveness 향상 NCB파일의동기화부분수정 더이상코딩을멈추는방해를하지않음 최악의상황에서도 CPU사용률이 90% 미만 프로젝트사이즈가 XXL 라도유연하게동작 3/12/2008 14
IDE 의향상 3/12/2008 15
병렬 Unit 컴파일옵션 {/MP(n)} CPU 가병렬적으로프로젝트컴파일 Tools > Options > Project and Solutions > Build and Run > parallel project builds 에서병렬적빌드프로젝트의개수선택가능 Dependency가있는프로젝트는적용이안됨 실제프로젝트운용상유명무실, 복배지모! /MP(n) switch 빌드의프로세스의개수를 Hard Coding할수있음 Cpp등의유닛단위로적용 셋팅에따라 30% 상하이상콤비네이션효과 3/12/2008 16
보안을위한컴파일러옵션 ASLR(Address Space Layout Randomization) 라이브러리적재위치, 스택, 힙의시작위치를랜덤화 /DYNAMICBASE DEP(Data Execution Prevention) Execute Disable, Enhanced Virus Protection 폰노이만구조의한계 /NXCOMPACT 3/12/2008 17
IDE 의비스타지원 비스타에서 VS2005 개발환경을꾸미면번거로운과정이들어감 Hotfix for VS2005 ENU(KB929470) 제거 VS2005 ServicePack1 with Vista 설치 Run as Administrator 로수행을권장 간단한테스트애플리케이션을작성할때도뜨는 UAC가상당히신경쓰임 VS2005 자체가 Vista 애플리케이션개발가이드라인에맞지않는애플리케이션이되어버림 3/12/2008 18
IDE 의비스타지원 처음부터 Run as Administrator 불필요 User 권한에서도개발가능 Administrator 권한이필요할때만 UAC 를통해권한획득 3/12/2008 19
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'> <trustinfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedprivileges> <requestedexecutionlevel level="asinvoker" uiaccess="false" /> </requestedprivileges> </security> </trustinfo> </assembly> 3/12/2008 20
UAC 지원하기 NEW WAY Project > Properties > Linker > Manifest File 관련 UI 제공 /MANIFESTUAC /MANIFESTUAC /MANIFESTUAC:NO /MANIFESTUAC:level={asInvoker highestavailable requireadministrator} /MANIFESTUAC:uiAccess={true false} 3/12/2008 21
추가지원되는컨트롤기능 커맨드링크컨트롤 스플릿버튼 BS_SPLITBUTTON 설정 Network Address IPv4, IPv6, DNS etc.. 시스템링크 콤보박스컨트롤 트리뷰 다중선택, 더블버퍼링 3/12/2008 22
그밖의변경사항 ATL Server 가 CodePlex 로릴리즈됨 Atlenc, atlutil.h, atlpath.h 지원안함 Intel Core Architecture 지원 cpuid 함수업그레이드 최신버전의 AMD 및 Intel 프로세서의향상된기능지원 /Wp64, w64 무효화 3/12/2008 23
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의문법변경 3/12/2008 24
AfxBeginMFCIsBack() 새로추가된새로운 Native API 활용 깔끔한사용자인터페이스 새로운 Native API 의래핑을지원하는것과동시에새로운컨트롤및공용대화상자등의추가제공 150개가넘는 Method와 18개의새로운클래스가 Vista를 feature지원을위해더해짐 기존코드보다성능향상 3/12/2008 25
MFCNext MFC 의향상된기능은대부분 UI 에집중 MFC 프로젝트를 VC9에서다시컴파일하면 Windows Vista에맞게모양자동최적화 EX) bvistastyle 추가파라미터전달 CFileDialog dlgfile(true); dlgfile.domodal(); 3/12/2008 26
Support Office&VS&IE style 3/12/2008 27
MFC 9.0 에서새로운것들 Visual style Application UI 빌드가가능 Microsoft Office Visual Studio Internet Explorer 다양한 UI 구성요소들지원 Toolbar 커스터마이징 메뉴, 키, 메뉴바, Docking Panes 다양한스킨지원 XP, Vista, Office2003, Office2007 (blue, black, aqua ) 3/12/2008 28
Office Interface 3/12/2008 29
IE Interface 3/12/2008 30
Visual Studio Interface 3/12/2008 31
새로운형태컨트롤지원 막상구현하려면막막한여러컨트롤지원 3/12/2008 32
MFC9.0 모습및변화 3/12/2008 33
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 만지원하게됨 3/12/2008 34
Known Uses 3/12/2008 35
StandardCppLibraryIsExtended() VS2008 에포함된 TR1 항목들 shared_ptr, weak_ptr mem_fn(), bind(),, and function 정규표현식 regex <random> Containers (tuple( tuple, array, unordered_set, etc.) <type_traits> reference_wrapper 포함되지않은항목들 C99 Compatibility (<cstdint>( <cstdint>,, etc.) Special Math Functions (riemann_zeta()( riemann_zeta(),, etc.) 3/12/2008 36
Visual Studio 에서 TR1 에대한정책 Visual C++ 2005 (VC8) 에는포함시키지않을것임 VC9 Express 버전에는포함안됨 Visual C++ 2008 (VC9) RTM 별도의 patch 를설치하면 VC9 RTM 에포함됨 VC9 SP1 과이후버전에는포함됨 (VC10, ) 3/12/2008 37
TR1 구성요소 TR1 의구성요소 <regex> 와같은새로운헤더파일셋 <memory> 와같은기존헤더의수정파일셋 msvcp90[d].dll 의수정파일셋 기존콤포넌트들과분리되어있는요소 헤더파일만추가한다고 TR1 을사용할수없음 msvcp90[d].dll 와같은파일과쌍으로움직여야함 MFC Update 와 TR1 Update 는별개임 3/12/2008 38
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은강하게연동됨 3/12/2008 39
<array> <functional> <memory> <regex> <tuple> <type_traits> <unordered_map> <unordered_set> <utility> 추가된헤더파일 3/12/2008 40
Reference VC++2008 Feature Pack Beta Documentation C++ 표준라이브러리확장튜토리얼및레퍼런스 - Pete Becker, 지 & 선 http://openstd.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 3/12/2008 41
Thank you 이후피드백 http://www.devpia.com/maeul/contents/list.aspx?boardid=4246&mae ULNo=4 Software Architecture 와 Pattern 관련 Study 및 Online 토론 Software Architecture 와 Design Pattern 관련 Q&A 3/12/2008 42