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

Download Report

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

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