17.11.2014 Views

VS2008을 이용한 C++코드의 견고한 업그레이드

VS2008을 이용한 C++코드의 견고한 업그레이드

VS2008을 이용한 C++코드의 견고한 업그레이드

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Visual Studio2008을 이용한<br />

C++코드의 견고한 업그레이드<br />

김용현 www.YHKim.com<br />

Microsoft MVP<br />

Chief Programmer, ESTsoft


유츠프라카치아<br />

3/12/2008 2


Windows with Native VS .NET<br />

• .NET Framework 성공, 그러나<br />

• Native C++이 합리적인 경우가 많음<br />

• C++은 Windows SDK를 이용해 Windows의 모<br />

든 부분을 자유롭게 엑세스 할 수 있는 유일한<br />

언어<br />

• VC++ 2008의 업데이트쯤에서 대대적인 업그레<br />

이드가 이루어짐<br />

3/12/2008 3


Agenda<br />

• Overview on new VC++<br />

• 편리한 사용성 지원<br />

• 추가된 컨트롤 지원<br />

• MFCNext<br />

• 표준 라이브러리 확장<br />

3/12/2008 4


Overview<br />

• Visual C++ 2008 컴파일러는 OOO를 지원<br />

CLR(Common Language Runtime)<br />

x86, x64, Itanium<br />

최적화 지원<br />

• Visual C++ 2008 라이브러리는 OOO를 지원<br />

ATL, MFC, Standard C++ Library, STL, C Runtime<br />

Library, STL/CLR<br />

http://msdn2.microsoft.com/en‐us/library/60k1461a.aspx<br />

3/12/2008 5


Vista Style Guidelines<br />

• ATL, MFC, Win32에서 생성되는 다이얼로그는<br />

Vista style 가이드라인이 반영이 됨<br />

3/12/2008 6


Vista Style Guidelines<br />

• Aero 테마, 공용컨트롤, 공용 다이얼로그,작업관<br />

리자, Glass 효과, Aero Wizard, 시스템 폰트, 검<br />

색 상자, 에러메시지 다이얼로그, …<br />

• 비스타 지원<br />

새로운 컨트롤, 이벤트, Notification, 스타일에 대한<br />

MFC 지원<br />

3/12/2008 7


Class Designer<br />

• 2005에서 .NET 지원 언어들에게 지원되어졌음<br />

• Office등과 쉽게 연동되며 클래스 drag-drop 등<br />

으로 쉽게 사용<br />

• 아쉽게, Read Only<br />

3/12/2008 8


Class Designer<br />

class A {<br />

};<br />

class CCustomClass: public A {<br />

public: int a; int b;<br />

private: int c; int d;};<br />

3/12/2008 9


IDE Upgrade<br />

3/12/2008 10


IDE Upgrade<br />

3/12/2008 11


IDE Upgrade<br />

3/12/2008 12


IDE Upgrade<br />

3/12/2008 13


IDE의 향상<br />

• Solution Load Performance 향상<br />

• Editor Responsiveness 향상<br />

• IntelliSense Responsiveness 향상<br />

NCB파일의 동기화 부분 수정<br />

더 이상 코딩을 멈추는 방해를 하지 않음<br />

최악의 상황에서도 CPU사용률이 90%미만<br />

• 프로젝트 사이즈가 XXL라도 유연하게 동작<br />

3/12/2008 14


IDE의 향상<br />

3/12/2008 15


병렬 Unit 컴파일옵션<br />

{/MP(n)}<br />

• CPU가 병렬적으로 프로젝트 컴파일<br />

Tools > Options > Project and Solutions > Build<br />

and Run > parallel project builds 에서 병렬적 빌드<br />

프로젝트의개수선택가능<br />

Dependency가 있는 프로젝트는 적용이 안됨<br />

실제 프로젝트 운용상 유명무실, 복배지모!<br />

• /MP(n) switch<br />

빌드의 프로세스의 개수를 Hard Coding할 수 있음<br />

Cpp등의 유닛단위로 적용<br />

• 셋팅에 따라 30% 상하 이상 콤비네이션 효과<br />

3/12/2008 16


보안을 위한 컴파일러 옵션<br />

• ASLR(Address Space Layout Randomization)<br />

라이브러리적재위치, 스택, 힙의 시작위치를 랜덤화<br />

/DYNAMICBASE<br />

• DEP(Data Execution Prevention)<br />

Execute Disable, Enhanced Virus Protection<br />

폰노이만구조의 한계<br />

/NXCOMPACT<br />

3/12/2008 17


IDE의 비스타 지원<br />

• 비스타에서 VS2005 개발환경을 꾸미면 번거로<br />

운 과정이 들어감<br />

Hotfix for VS2005 – ENU(KB929470) 제거<br />

VS2005 ServicePack1 with Vista 설치<br />

Run as Administrator 로 수행을 권장<br />

간단한 테스트 애플리케이션을 작성할 때도 뜨는<br />

UAC가상당히신경쓰임<br />

VS2005 자체가 Vista 애플리케이션 개발 가이드라인<br />

에 맞지 않는 애플리케이션이 되어 버림<br />

3/12/2008 18


IDE의 비스타 지원<br />

• 처음부터 Run as Administrator 불필요<br />

• User 권한에서도 개발 가능<br />

• Administrator 권한이 필요할 때만 UAC를 통해<br />

권한 획득<br />

3/12/2008 19


UAC 지원하기 – OLD WAY<br />

#define MANIFEST_RESOURCE_ID 1<br />

MANIFEST_RESOURCE_ID RT_MANIFEST “AdminApp.exe.manifest”<br />

mt.exe -manifest 1.manifest 2.manifest -outputresource:MyApp.exe<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

3/12/2008 20


UAC 지원하기 – NEW WAY<br />

• Project > Properties > Linker > Manifest File<br />

• 관련 UI 제공<br />

• /MANIFESTUAC<br />

/MANIFESTUAC<br />

/MANIFESTUAC:NO<br />

/MANIFESTUAC:level={asInvoker|<br />

highestAvailable|<br />

requireAdministrator}<br />

/MANIFESTUAC:uiAccess={true|false}<br />

3/12/2008 21


추가 지원되는 컨트롤 기능<br />

• 커맨드 링크 컨트롤<br />

• 스플릿 버튼<br />

BS_SPLITBUTTON 설정<br />

• Network Address<br />

IPv4, IPv6, DNS etc..<br />

• 시스템 링크<br />

• 콤보 박스 컨트롤<br />

• 트리뷰<br />

다중선택, 더블 버퍼링<br />

3/12/2008 22


그밖의 변경사항<br />

• ATL Server가 CodePlex로 릴리즈 됨<br />

Atlenc, atlutil.h, atlpath.h 지원안함<br />

• Intel Core Architecture 지원<br />

• __cpuid함수 업그레이드<br />

최신 버전의 AMD 및 Intel 프로세서의 향상된 기능<br />

지원<br />

• /Wp64, __w64 무효화<br />

3/12/2008 23


CRT,STL의 변경사항<br />

• Windows2000 아래의 운영체제 지원 중단<br />

Windows 95/98/ME, Windows NT4.0<br />

• CRT의 일부 함수 삭제<br />

_osplatform, _osver, _winmajor, _winminor, _winver<br />

_get_osplatform, _get_osver, _get_winmajor,<br />

_get_winminor, _get_winver<br />

SAL의 문법 변경<br />

3/12/2008 24


AfxBeginMFCIsBack()<br />

• 새로 추가된 새로운 Native API 활용<br />

• 깔끔한 사용자 인터페이스<br />

• 새로운 Native API의 래핑을 지원하는 것과 동시<br />

에 새로운 컨트롤 및 공용 대화상자 등의 추가<br />

제공<br />

150개가 넘는 Method와 18개의 새로운 클래스가<br />

Vista를 feature지원을 위해 더해짐<br />

기존 코드보다 성능 향상<br />

3/12/2008 25


MFCNext<br />

• MFC의 향상된 기능은 대부분 UI에 집중<br />

• MFC 프로젝트를 VC9에서 다시 컴파일 하면 Windows<br />

Vista에 맞게 모양 자동 최적화<br />

EX) bVistaStyle 추가 파라미터 전달<br />

CFileDialog dlgFile(TRUE);<br />

dlgFile.DoModal();<br />

3/12/2008 26


Support Office&VS&IE style<br />

3/12/2008 27


MFC 9.0에서 새로운 것들<br />

• Visual style Application UI 빌드가 가능<br />

Microsoft Office<br />

Visual Studio<br />

Internet Explorer<br />

• 다양한 UI 구성 요소들 지원<br />

Toolbar 커스터마이징<br />

메뉴, 키, 메뉴바, Docking Panes<br />

• 다양한 스킨 지원<br />

XP, Vista, Office2003, Office2007 (blue, black,<br />

aqua…)<br />

3/12/2008 28


Office Interface<br />

3/12/2008 29


IE Interface<br />

3/12/2008 30


Visual Studio Interface<br />

3/12/2008 31


새로운 형태 컨트롤 지원<br />

• 막상 구현하려면 막막한 여러 컨트롤 지원<br />

3/12/2008 32


• MFC9.0 모습 및 변화<br />

3/12/2008 33


MFC 9.0에서 변화된 것들<br />

• CTime 클래스의처리날짜확장변경<br />

• ActiveX컨트롤을 삽입후 탭오더 변경 버그 수정<br />

• CFileDialog의 컨트롤 ID가 변경<br />

• CWnd::GetMenuBarInfo 메소드 삭제<br />

CFrameWnd::GetMenuBarInfo의 Virtual 속성 없어짐<br />

• CHttpServer가 없어짐<br />

ISAPI(Internet Server Application Programming Interface)를<br />

지원하지 않음<br />

• ANSI MFC 메소드를 Unicode로 변경 권장<br />

Visual Manager는 MBCS과 Unicode를 모두 지원하지만<br />

Windows Control를 래핑하면서 Unicode만 지원하게 됨<br />

3/12/2008 34


Known Uses<br />

3/12/2008 35


StandardCppLibraryIsExtended()<br />

• VS2008에 포함된 TR1항목들<br />

shared_ptr, weak_ptr<br />

mem_fn(), bind(), , and function<br />

정규 표현식 regex<br />

<br />

Containers (tuple(<br />

tuple, array, unordered_set , etc.)<br />

<br />

<br />

<br />

reference_wrapper<br />

• 포함되지 않은 항목들<br />

C99 Compatibility ((<br />

, , etc.)<br />

Special Math Functions (riemann_zeta()(<br />

riemann_zeta(), , etc.)<br />

3/12/2008 36


Visual Studio 에서<br />

• TR1에 대한 정책<br />

<br />

<br />

<br />

<br />

<br />

Visual C++ 2005 (VC8)에는<br />

포함시키지 않을 것임<br />

VC9 Express 버전에는 포함 안됨<br />

Visual C++ 2008 (VC9) RTM<br />

별도의 patch를 설치 하면 VC9 RTM에 포함 됨<br />

VC9 SP1 과 이후 버전에는 포함 됨 (VC10, …)<br />

3/12/2008 37


TR1 구성요소<br />

• TR1 의 구성 요소<br />

<br />

<br />

<br />

와 같은 새로운 헤더 파일 셋<br />

와 같은 기존 헤더의 수정 파일 셋<br />

msvcp90[d].dll 의 수정 파일 셋<br />

• 기존 콤포넌트들과 분리되어 있는 요소<br />

<br />

<br />

<br />

헤더 파일만 추가 한다고 TR1을 사용할 수 없음<br />

msvcp90[d].dll와 같은 파일과 쌍으로 움직여야 함<br />

MFC Update와 TR1 Update는 별개임<br />

3/12/2008 38


TR1 differ from Boost<br />

• 라이선스 정책<br />

<br />

Boost는 오픈소스, , TR1은 DLL Library 정책에 따름<br />

• Boost의 모든 요소가 TR1에 포함 된 것은 아님<br />

<br />

일부 regex 문법, , shared_array …<br />

• 최적화 (e.g. vector)<br />

• 기존 STL과 같이 사용할 수 있도록 리포지셔닝<br />

• /clr, /clr:pure, /W4, /Za, /Gz, /anlayze<br />

• STL에서 처럼 IDE Debugger Visualizer에서<br />

TR1 type은 강하게 연동됨<br />

3/12/2008 39


• <br />

• <br />

• <br />

• <br />

• <br />

• <br />

• <br />

• <br />

• <br />

추가된 헤더파일<br />

3/12/2008 40


Reference<br />

• VC++2008 Feature Pack Beta Documentation<br />

• C++ 표준 라이브러리 확장 튜토리얼 및 레퍼런스 - Pete<br />

Becker, 지&선<br />

• http://openstd.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf<br />

• http://blogs.msdn.com/vcblog<br />

• http://channel9.msdn.com/tags/C++<br />

• http://blogs.msdn.com/somasegar<br />

3/12/2008 41


Thank you<br />

• 이후 피드백<br />

http://www.devpia.com/MAEUL/Contents/List.aspx?BoardID=4246&MAE<br />

ULNo=4<br />

• Software Architecture와 Pattern 관련 Study 및 Online 토론<br />

• Software Architecture와 Design Pattern 관련 Q&A<br />

3/12/2008 42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!