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