VS2008ì ì´ì©í C++ì½ëì ê²¬ê³ í ì ê·¸ë ì´ë
VS2008ì ì´ì©í C++ì½ëì ê²¬ê³ í ì ê·¸ë ì´ë
VS2008ì ì´ì©í C++ì½ëì ê²¬ê³ í ì ê·¸ë ì´ë
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