개발 프로세스와 결과물
2010-05-31 2
MOTIVATION새로운기능
•클래스위자드문법자동완성기능
개선된기능
•인텔리센스레이 인트
수정된기능
•컴파일러버그수정향상된•문법자동완성기능
•인텔리센스라이브에러리포팅
• WPF를이용한 UI구성
•브레이크포인트•디버깅기능• Find and Replace• Call Hierarchy
•향상된 Add-in Support• SQL Compact
Database를이용한인텔리센스 DB파일WPF를이용한 UI 구성
• PPL•병열스택윈도우•병열작업디버그윈도우
Call Hierarchy•자주사용하는클래스의임베딩
•최신윈도즈용애플리케이션개발지원
•대용량코드지원•멀티스레드디버깅•덤프파일분석
우
• C++0x• MSBuild
이션개발지원
•최신윈도즈에 VS가잘운영되도록수정
•브레이크포인트관리레이 인 관리
•세밀한빌드/링크정보
2010-05-31 3
최신의 개발환경을 지원
2010-05-31 4
EMBEDDED CLASS -SAFEINT오버플로우로인한오류를방지하는정수형클래스
8bit 정수의경우 200 + 100의결과는 44기계적으로우아하게이루어지는오버플로우
#include <safeint.h>i l tilitiusing namespace msl::utilities;
void foo(){
SafeInt<unsigned int, _SAFEINT_DEFAULT_ERROR_POLICY> safeInt;}}
2010-05-31 5
DEMO최신개발환경지원
Add-in : Go To Definition
데이터피닝
DUMP파일
2010-05-31 6
MOTIVATION새로운 개발툴이 출시되면
새로운기능소개와수정
코드및라이브러리점검소개와수정 브러리점검
2010-05-31 7
AGENDAVisual Studio 와 SDK새로워진 Build System 소개Multi Targeting
새로운키워드
auto, static_assert, nullptr(__nullptr)
CRT 강제종료문구트라이그래프
Library 배포정책변경b a y배 정책변경
2010-05-31 8
컴파일러와 SDKWindows SDK for Visual Studio 2010Windows SDK for Windows7
2010-05-31 9
BUILD SYSTEM빌드환경을꾸미기에제한적임
모든빌드과정은커맨드라인으로기술되어컴파일러바이너리내부적으로처리.
개발툴의버전마다모두다름
제품 개발툴 컴파일툴 업그레이드 긴급패치
app1.exe VS2003 VS2003 x o2 VS200 VS200app2.exe VS2005 VS2005 x o
app3.exe VS2008 VS2008 o o
2010-05-31 10
BUILD SYSTEM애플리케이션에따라빌드환경을꾸미기위한 Visual Studio 혹은Visual C++툴을설치프로젝트파일(.vcproj)이 VS에종속되어있음.크로스컴파일이안됨 (VS2005 <-/-> VS2008)상위버전의 VS에서하위버전의 VS프로젝트파일을여는방법은오로지마이그레이션위자드,
제품 개발툴 컴파일툴 업그레이드 긴급패치
app1.exe VS2003 VS2003 x oapp2 exe VS2005 VS2005 x oapp2.exe VS2005 VS2005 x oapp3.exe VS2008 VS2008 o o
2010-05-31 11
DEMO변경된프로젝트파일
MSBuild
2010-05-31 12
MULTI TARGETING멀티타겟팅
최신버전이제공하는 IDE및코딩, 디버깅환경을이용하위호환의바이너리생성
다양한플랫폼의프로젝트를섞어사용
Visual Studio 2005에서 .NET 언어에지원Native 언어를위한멀티타겟팅
VS2010은Windows 2000을지원하지않음. 그럼어떻게?
2010-05-31 13
MULTI TARGETING프로젝트파일이 VS의버전에종속되지않는 XML양식으로변경툴셋을설정하여범용적인컴파일러를선택하는환경
새로운프로젝트파일을참조하여툴셋마다다른방법을제공하는빌드환경이가능해짐
VS2010을에디터로사용하면서컴파일러멀티타겟팅이가능해짐이전 VS를풀로설치할필요없이컴파일러만설치하면됨.VS2010과필요한 SDK 설치만으로많은플랫폼지원가능
2010-05-31 14
MULTI TARGETINGProject -> Properties -> Configuration Properties -> General -> Platform Toolset
플랫폼툴셋 = 컴파일러 + 컴파일에필요한도구 + 라이브러리 + 헤더파일 + 링커IDE를제외하고바이너리를생성하는데필요한전체셋IDE를제외하고바이너리를생성하는데필요한전체셋
2010-05-31 15
MULTI TARGETING지원하는플랫폼
플랫폼툴셋을만들수있는모든환경지원
VS2008, 2005… 2002… VC6… CE/Windows Mobile..
문제가있을경우도움을받으세요
“특정버전의플랫폼툴셋을구성하기위해서해당 Visual Studio 혹은 Visual C++을모두설치해야하나요?”
VC6 : Platform SDK Feb. 2003VS2008 : Windows SDK for Windows server 2008VS2010 : Windows SDK for Windows7
2010-05-31 16
MULTI TARGETING커스텀컴파일러설정
%PROGRAMFILES%\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsetsMicrosoft.Cpp.<Platform>.<PlatformToolset>.props
Microsoft.Cpp.Win32.v100.propsMicrosoft.Cpp.Win32.v100.targets
기본컴파일러설정
%PROGRAMFILES%\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.default.props
2010-05-31 17
NEW KEYWORD -AUTO기억부류지정자(Storage Class Specifier) : 일반적으로선언자앞에쓰여컴파일러에게할당되는공간의존속시간과가시성을알려주는키워드려주는키워드
auto, register, static, extern / mutable
auto
l l lif ti 을가지는 t ti 변수local lifetime을가지는automatic 변수블록안쪽에서만유효하며선언시초기화를해야함.
2010-05-31 18
NEW KEYWORD -AUTOC++0x에서 auto는기억부류지정자가아닌타입연역자(Type Deduction)로키워드가사용됨타입연역자 :초기화되는값에따라변수의타입이정해지게됨타입연역자 : 초기화되는값에따라변수의타입이정해지게됨.템플릿의이터레이터선언이나람다표현식, 함수포인터등에유연하게사용됨
auto a = 1; // intauto b = “abcd”; // basic_string<char>auto c = new A(); // class A
t 를타입연역자가아닌기억부류지정자로사용
auto c new A(); // class A
auto를타입연역자가아닌기억부류지정자로사용Project -> Properties -> Configuration Properties ->
C/C++ -> Command Line에 /Zc:auto-추가
2010-05-31 19
NEW KEYWORD –STATIC_ASSERT실행시점이전인컴파일시점에코드를검증
템플릿의구현체코드를정확하게사용했는지검증하는데유용하게사용
template<typename T>b l C (T 1 T 2)bool Compare(T v1, T v2){
static_assert(std::tr1::is_integral<T>::value, "숫자가 아님");return v1 > v2;
}}
2010-05-31 20
NEW KEYWORD –NULLPTR, __NULLPTRC++에선없는값을표현하는값이존재하지않았음.델파이의 nil
#ifdef __cplusplus#define NULL 0#else
void foo(TCHAR const * str) {};void main()
#else#define NULL ((void *)0)#endif
{foo(false); // 컴파일 성공foo(true); // 컴파일 실패
}
0이특정값이면 0xFFFFFFFF0이특정값이면 0nullptr, __nullptr이새로운키워드로추가
2010-05-31 21
그밖에,..CRT 함수가사용하는힙지정 __MSVCRT_HEAP_SELECT 환경변수제거
/OPT:WIN98, /OPT:NOWIN98 제거삭제된항목들은대안이없음.
2010-05-31 22
DEMO변경사항검사
2010-05-31 23
CRT ABORT DIALOGterminate(), abort()
애플리케이션에서 terminate가호출됐다는것은종료가의도CRT의종료메시지는불필요만일, 종료다이얼로그및메시지를인식하는 UI테스트코드와같은경우변경이필요
2010-05-31 24
TRIGRAPHC코드는 7비트 ASCII에포함된문자로구성되는것이표준1983년에지저오딘 83개의문자를가진 ISO 646-1983 문자셋지원83개의문자를벗어나는문자는별도의방법을통해입력할수있도록트라이그래프를지원및인식
Visual C++ 컴파일러는트라이그래프를지원Trigraph Equivalent Trigraph Equivalent Trigraph Equivalent
??= # ??( [ ??< {??/ \ ??) ] ??> }??/ \ ??) ] ??> }
??' ^ ??! | ??- ~
??=include <iostream> // #include<iostream>id i ()void main()
??<std::cout << "??/??/" << std::endl; // cout << "\\" << endl;??>
2010-05-31 25
TRIGRAPH잘쓰이지않는지원에따른불편함이존재
C4837 Warning
‘?’는이스케이프시퀀스로 ‘\?’ 사용
TCHAR* str1 = TEXT("C:\\*.P??");TCHAR* str2 = TEXT("Typ1 (*.p??)|*.p??|Typ2 (*.d??)|*.d??|Alle Dateien(*.*)|*.*||");CFileDialog FileDialog(TRUE, NULL, str1, OFN_FILEMUSTEXIST, str2, NULL);
Visual Studio 2010에서는트라이그래프의기본옵션이 Disablesua Stud o 0 0에서는 라이 래 의기본옵션이 sab e/Zc:trigraphs
2010-05-31 26
LIBRARY 배포 정책 –배 정책LEGACY 지금까지의 Library배포정책은 격리된응용프로그램(Isolated Application), Side-by-side로요약됨격리된응용프로그램 : manifests를이용하여 private 어셈블리와, shared 어셈블리를애플리케이션의manifest로기술Shared어셈블리는 Side by side어셈블리형태로설치 재배포패Shared 어셈블리는 Side-by-side 어셈블리형태로설치. 재배포패키지를이용.Private어셈블리는실행파일과함께배포/설치되고해당설치프Private 어셈블리는실행파일과함께배 /설치되 해당설치로그램만을위해사용되는어셈블리.Shared 어셈블리권장.
2010-05-31 27
LIBRARY 배포 정책 – SIDE-LIBRARY 배포 정책 SIDEBY-SIDE ASSEMBLIES권장
Side-by-side 어셈블리는 DLL 버전이충돌하는것을막아줌다양한버전의 COM이나윈도즈어셈블리가실행되도 side-by-side 어셈블리를공유함.애플리케이션제공업체나관리자는 Side-by-side 어셈블리를publisher configuration file이나 per application configurationpublisher configuration file이나 per-application configuration 파일생성/변경으로업데이트할수있다.Side-by-side어셈블리업데이트과정에서반드시재배포패키지를Side by side 어셈블리업데이 과정에서반 시재배 패키지를설치하거나제품을다시설치할필요가없다
2010-05-31 28
LIBRARY 배포 정책 – 어배 정책 어셈블리 검색 순서
1. Side-by-side는 ko-kr 버전을 WinSxS에서 찾음.
2. c:\myapp\ko-kr\myasm.dll
3. c:\myapp\ko-kr\myasm.manifest
4. c:\myapp\ko-kr\myasm\myasm.dll
5. c:\myapp\ko-kr\myasm\myasm.manifest5. c:\myapp\ko kr\myasm\myasm.manifest
6. Side-by-side는 ko 버전을 WinSxS에서찾음.
7. c:\myapp\ko\myasm.dll
8. c:\myapp\ko\myasm.manifest
9. c:\myapp\ko\myasm\myasm.dll
10 c:\myapp\ko\myasm\myasm manifest10. c:\myapp\ko\myasm\myasm.manifest
11. Side-by-side는 en-us 버전을 WinSxS에서찾음.
12. c:\myapp\en-us\myasm.dll
13. c:\myapp\en-us\myasm.manifest
14. c:\myapp\en-us\myasm\myasm.dll
15 c:\myapp\en us\myasm\myasm manifest15. c:\myapp\en-us\myasm\myasm.manifest
16. Side-by-side는 en 버전을 WinSxS에서찾음.
17. c:\myapp\en\myasm.dll
18. c:\myapp\en\myasm.manifest
19. c:\myapp\en\myasm\myasm.dll
20 \ \ \ \ if t20. c:\myapp\en\myasm\myasm.manifest
21. Side-by-side는 언어가없는버전의라이브러리를 WinSxS에서찾음.
22. c:\myapp\myasm.dll
23. c:\myapp\myasm.manifest
24. c:\myapp\myasm\myasm.dll
2010-05-31 29
25. c:\myapp\myasm\myasm.manifest
LIBRARY 배포 정책 –배 정책LEGACY
<assembly xmlns="urn:schemas microsoft com:asm v1" manifestVersion="1 0"><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"></requestedExecutionLevel>
</requestedPrivileges>q g</security>
</trustInfo><dependency><dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1"A hit t " 86" bli K T k "1f 8b3b9 1 18 3b"></ bl Id tit >processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly></dependency><dependency><dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8"y y ypprocessorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly></dependency>
</assembly>
서비스팩설치이후라이브러리를모두재컴파일, 바인딩상수선언Static 빌드, policy 확인또는 <이미지이름>.config의 bindingRedirect로정책변경임의의버전을선택해서메니페스트를구성
2010-05-31 30
LIBRARY 배포 정책 –배 정책LEGACY “같은폴더에라이브러리가있는데도실행이안되요”“재배포패키지를삭제하니애플리케이션이실행되지않아요”“시키는대로다했는데도애플리케이션이실행되지않아요”“클라이언트 PC의정책설정과manifest설정이어려워요”
2010-05-31 31
LIBRARY 배포 정책
중앙배치CentralCentral
Deployment
지역배치정적링크 Local
Deployment정적링크
static linking
2010-05-31 32
LIBRARY 배포 정책
중앙배포 : system32 폴더에라이브러리들을복사, system32안에들어있기때문에윈도우업데이트가쉽게찾을수있어라이브러리업데이트가용이 재배포패키지나머지모듈을통하여배포리업데이트가용이. 재배포패키지나머지모듈을통하여배포.지역배포 : 애플리케이션이위치한폴더에라이브러리파일들을위치시키는방식이며간편하게해당애플리케이션만적용. 중앙배포와의차이점은윈도라이브러리를통하여업데이트를하지않는가차이
정적링크 애플리케이션안쪽에라이브러리를포함정적링크 : 애플리케이션안쪽에라이브러리를포함.
2010-05-31 33
LIBRARY 배포 정책
Visual Studio 2010의라이브러리는 Side-by-side 폴더에생성되지않는다.지역배치방식이우선적임
OS 관련라이브러리는중앙배포우선
2010-05-31 34
궁금한 것이 있을 때 포럼을
http://social.msdn.microsoft.com/Forums/en-US/category/visualc
2010-05-31 35
REFERENCEBreaking Changes in Visual C++ - MSDN 라이브러리http://msdn.microsoft.com/en-us/library/bb531344(v=VS.100).aspxExploring New C++ and MFC Features in Visual Studio 2010 -Sumit KumarSumit Kumarhttp://msdn.microsoft.com/en-us/magazine/ee336130.aspxD l t i Vi l C++ 2010Deployment in Visual C++ 2010http://msdn.microsoft.com/en-us/library/dd293574%28VS.100%29.aspxus/library/dd293574%28VS.100%29.aspx
2010-05-31 36
Top Related