고재관 microsoft mvppds7.egloos.com/pds/200803/21/70/vc2008update.pdf ·...
TRANSCRIPT
고재관Microsoft [email protected] www.PDAlab.org myaustin.egloos.com
Microsoft 공인 MVPMicrosoft 공인 MVP600시간세미나/강의C++ 개발실무경력 14년C++ 개발실무경력 14년집필도서
윈도우임베디드 CE 프로그래밍입문 (2008 3 정보문화사)윈도우임베디드 CE 프로그래밍입문 (2008.3, 정보문화사)윈도우임베디드 CE 프로그래밍 (2006, 정보문화사)팔아라! 실전PDA프로그래밍 (2002)팔아라! 실전PDA프로그래밍 (2002)Starting Mobile PDA Programming (2001)
전문분야전문분야VC++ 기반 Mobile & Server 응용프로그램개발Mobile Device 컨설턴트및 Market PlannerWindows Mobile 기반휴대폰 Software 제작DirectShow 기반개발
주요내용주요내용
VC++ 2008VC++ 2008VC++ 업데이트VC 새로운기능VC++ 새로운기능VC++ MFC ControlVC++ 업그레이드데모데모
VC++VC++Visual C ++MS C 7 0 이후의 Microsoft 개발도구MS C 7.0 이후의 Microsoft 개발도구Microsoft 최초의 C++ 개발도구C/C 에기반하여 Wi d 16/32 API 사용C/C++ 에기반하여 Windows 16/32 API 사용Windows 응용프로그램개발도구단독실행프로그램제작가능한유일한도구
MFCMicrosoft Foundation Class LibraryC++형태의 Windows API 클래스라이브러리C++형태의 Windows API 클래스라이브러리
컴파일러버전 내부버전 MFC버전 통합제품
MS C 7. 0 - 1.0Visual C++ 1.0 1.0 2.0Visual C++ 1.5 1.5 2.5Visual C++ 2.0 2.0 3.0Visual C++ 2.1 2.1 3.1Visual C++ 2 2 2 2 3 2Visual C++ 2.2 2.2 3.2Visual C++ 4.0 4.0 4.0Visual C++ 4.1 4.1 4.1Vi l C 4 2 4 2 4 2Visual C++ 4.2 4.2 4.2Visual C++ 5.0 5.0 4.21 Visual Studio 97Visual C++ 6.0 6.0 6.0 Visual Studio 6.0 Visual C++ .NET 2002 7.0 7.0 Visual Studio .NET 2002Visual C++ .NET 2003 7.1 7.1 Visual Studio .NET 2003Visual C++ 2005 8.0 8.0 Visual Studio 2005Visual C++ 2008 9.0 9.0 Visual Studio 2008
10.0
목표목표다음세대기술을리드하는네이티브개발자
전략/ 수행전략/ 수행생산성과적응력향상을위한 VC++ 향상안전&빠른최신의개발라이브러리투자네이티브와관리형코드간융합기술
지원VC++ 컴파일러향상VC++ 컴파일러향상VC++ 추가기능지원및 MFC향상Windows Vista / Office UI / Visual Studio UIWindows Vista / Office UI / Visual Studio UI관리형코드간원활한연동위한마샬링지원
VC++ VC++ 업데이업데이트트
VC++ 개발환경VC++ 개발환경VC++ 라이브러리VC 컴파일및링크VC++ 컴파일및링크VC++ 프로젝트젝
VC++ VC++ 업데이트업데이트
Windows Vista 스타일지침적용Windows Vista 스타일지침적용이전버전유지
ATL 등록옵션ATL 등록옵션‘모든사용자의구성요소등록’ 관리자권한기본 HKEY_CURRENT_USER 적용 HKEY_LOCAL_MACHINE
클래스디자이너C++클래스다이어그램기능추가C++클래스다이어그램기능추가
VC++ VC++ 업데이트업데이트
STL/CLR 라이브러리STL/CLR 라이브러리CLR과 C++간공유하는 STL
MFC 라이브러리MFC 라이브러리Windows Vista 공용컨트롤지원클래스 18개 , 매서드 150개추가
C++ 지원라이브러리지원라이 러리표준 C++ 지원강화마샬링라이브러리추가마샬링라이브러리추가P/Invoke 사용불필요
VC++ VC++ 업데이트업데이트
증분빌드증분빌드종속코드영향부분만재컴파일
새로운칩셋지원새로운칩셋지원AMD, Intel 칩셋지원 APIIntel Core 2 지원성능지원
병렬빌드 (/MP옵션)병렬빌 (/ 옵션)하이퍼스레딩, 다중프로세서, 다중코어
64비트옵션제거 (/Wp64 w64)64비트옵션제거 (/Wp64 , __w64)64비트용 VC++ 2008 사용으로변경
UAC지원옵션추가UAC지원옵션추가
VC++ VC++ 업데이트업데이트
운영체제운영체제Windows 2000 : x86Windows XP : x86 x64Windows XP : x86, x64Windows Server 2003 : x86, x64, ItaniumWi d Vi t 86 64 It iWindows Vista : x86, x64, Itanium중단 : Windows 95, 98, ME, NTWINVER , _WIN32_WINNT 매크로 (/D 옵션)
Winable.h 제거 Winuser.h 포함제거 함Rpcndr.lib 제거 Rpcrt4.lib 링크
VC++ VC++ 새로운새로운기능기능
MFCMFC리소스병렬빌드병렬빌드UAC클래스디자이너증분빌드증분빌드TR1마샬링STL/CLRSTL/CLR
VC++ VC++ 새로운새로운기능기능
Visual Studio IDE 지원Visual Studio IDE 지원리본바지원 (Office 2007 스타일)Vi t C t l Cl 추가Vista Control Class 추가
CSplitButton Class , CNetAddressCtrl Class, CPagerCtrl Class
기존 Class 매소드추가기 매 추가CMonthCalCtrl(19), CButton (15), CTreeCtrl (15), CListCtrl(14), CToolBarCtrl(9), CProgressCtrl(8), ( ) ( ) g ( )CEdit(7), CComboBox (5), CDateTimeCtrl(5), CHeaderCtrl(5), ReBarCtrl(4), CToolTipCtrl(4), CSlid C l(2) CS B C l(1)CSliderCtrl(2), CStatusBarCtrl(1), CAnimateCtrl(1), CLinkCtrl(1)
VC++ VC++ 새로운새로운기능기능
아이콘아이콘128x128, 256x256 추가24비트색상추가24비트색상추가
이미지PNG 지원추가
VC++ VC++ 새로운새로운기능기능
멀티프로세스빌드지원 (병렬컴파일)멀티프로세스빌드지원 (병렬컴파일)속도향상및자원효율적이용/MP 컴파일러스위치지원/MP 컴파일러스위치지원
/MP 또는 /MPn (n은 CPU의개수)프로젝트 속성 구성속성 C/C++ 명령줄 추가옵션
멀티프로세스설정도구 옵션 프로젝트및솔루션 빌드및도구 옵션 프로젝트및솔루션 빌드및실행 최대병렬프로젝트빌드수최상의결과를얻기위한설정최상의결과를얻기위한설정
VC++ VC++ 새로운새로운기능기능
UAC (User Account Control) 매니패스트UAC (User Account Control) 매니패스트링커옵션
||
프로젝트 속성 링커 매니페스트파일/MANIFESTUAC[:{NO|”fragment”}]/MANIFESTUAC[:{NO|”fragment”}]
VC++ VC++ 새로운새로운기능기능
Class Designer (Class Diagram)Class Designer (Class Diagram)클래스구성코드다이어그램으로표현C# VB NET 기능이 VC++ 까지확대C#, VB.NET 기능이 VC++ 까지확대
VC++ VC++ 새로운새로운기능기능
증분만반영증분만반영파일변경부분적용부분만반영
/INCREMENTAL 옵션/INCREMENTAL 옵션프로젝트 속성 헤더파일헤더파일11 헤더파일헤더파일22
구성속성 링커일반 증분링크 CPPCPP파일파일11 CPPCPP파일파일22
objobj
컴파일
objobj
컴파일
..objobj
링크
..objobj
.exe
VC++ VC++ 새로운새로운기능기능
The Technical Report on C++ LibraryThe Technical Report on C++ Library Extensions
ISO/IEC TR19768 C++ Library ExtensionISO/IEC TR19768, C++ Library ExtensionC++ 표준라이브러리의확장
사용시STL 사용시TR1 사용시
using namespace std;using namespace std;
using namespace std::tr1;using namespace std::tr1;
VC++ 2008 이상지원반드시 Feature Pack 설치반드시 Feature Pack 설치
http://dinkumware.com/tr1.aspx
VC++ VC++ 새로운새로운기능기능
관리형 네이티브코드간데이터마샬링관리형, 네이티브코드간데이터마샬링#include <#include <msclrmsclr//marshal.hmarshal.h>>using namespace using namespace msclrmsclr::::interopinterop;;using namespace using namespace msclrmsclr::::interopinterop;;... ... System::String^ System::String^ srcsrc = “= “teststringteststring””const char* tar; const char* tar; const char tar; const char tar; marshal_contextmarshal_context ctxctx;;tar = tar = ctx.marshal_asctx.marshal_as<const char*>(<const char*>(srcsrc););
STL과 .NET 컬렉션간의데이터교환#include <#include <cliextcliext//hash maphash map>>#include <#include <cliextcliext//hash_maphash_map>>#include <#include <cliextcliext/algorithm>/algorithm>... ... cliextcliext::vector<String^> v4;::vector<String^> v4;cliextcliext::vector<String > v4;::vector<String > v4;cliextcliext::::random_shufflerandom_shuffle( v4.begin(), v4.end() );( v4.begin(), v4.end() );
VC++ MFC ControlVC++ MFC Control
공용파일다이얼로그공용파일다이얼로그Split Button ControlN t k Add C t lNetwork Address ControlCommand Button ControlPager ControlSysLink ControlSysLink Control
VC++ MFC ControlVC++ MFC Control Vista OnlyVista Only
공용파일다이얼로그공용파일다이얼로그Vista 형태의다이얼로그기본지원Shell Interface 형태 Component 호출Shell Interface 형태 Component 호출
IFileOpenDialog , IFileSaveDialog , IFileDialogEvents기존 API형태도유지되나기본호출되지않음기존 API형태도유지되나기본호출되지않음
GetOpenFileName , GetSaveFileName , OnNotify
VC++ VC++ MFC ControlMFC Control Vista OnlyVista Only
Split Button ControlSplit Button ControlMFC : CSplitButton Class여러명령집합묶음버튼여러명령집합묶음버튼메뉴리소스를활용한다중처리버튼CS litB ttCS litB tt G tS litSiG tS litSi ( )( )CSplitButtonCSplitButton::::GetSplitSizeGetSplitSize( ... );( ... );CSplitButtonCSplitButton::::SetDropDownMenuSetDropDownMenu(IDR_MENU, 0);(IDR_MENU, 0);CSplitButtonCSplitButton::::SetWindowTextSetWindowText("("메뉴메뉴 1 1 사용사용");");CSplitButtonCSplitButton::::SetWindowTextSetWindowText(( 메뉴메뉴 1 1 사용사용 ););
VC++ VC++ MFC ControlMFC Control Vista OnlyVista Only
Network Address ControlNetwork Address ControlMFC : CNetAddressCtrl Class네트워크주소입력네트워크주소입력. IPv4, IPv6, DNS의유효성검사NET ADDRESS INFO NET ADDRESS INFO ffNET_ADDRESS_INFO NET_ADDRESS_INFO nfonfo;;NC_ADDRESS NC_ADDRESS addraddr;;addr.pAddrInfoaddr.pAddrInfo = &= &nfonfo;;pp ;;CNetAddressCtrlCNetAddressCtrl::::SetAllowTypeSetAllowType( ( 마스크마스크 ););CNetAddressCtrlCNetAddressCtrl::::GetAddressGetAddress(&(&addraddr););
dd ldd l i l ii l i ()() //// 오류오류CNetAddressCtrlCNetAddressCtrl::::DisplayErrorTipDisplayErrorTip(); (); // // 오류오류
VC++ VC++ MFC ControlMFC Control Vista OnlyVista Only
Command Button ControlCommand Button ControlMFC : CButton Class아이콘 노트같은커다란버튼지원아이콘, 노트같은커다란버튼지원승인아이콘CB ttCB tt S tShi ldS tShi ld(TRUE)(TRUE)
버튼설명CButtonCButton::::SetShieldSetShield(TRUE);(TRUE);
CButtonCButton::::SetNoteSetNote((”버튼에”버튼에 대한대한 설명”설명”););
VC++ VC++ MFC ControlMFC Control
Pager ControlPager ControlMFC : CPagerCtrl Class툴바용페이지컨트롤툴바용페이지컨트롤양끝방향버튼으로버튼페이지구성CPagerCtrlCPagerCtrl m_pctlm_pctl;;m_pctl.Createm_pctl.Create( ... );( ... );CToolBarCToolBar m toolbarm toolbarCToolBarCToolBar m_toolbarm_toolbarm_toolbar.CreateExm_toolbar.CreateEx(&(&m_pctlm_pctl););m_toolbar.LoadToolBarm_toolbar.LoadToolBar(IDR_TOOLBAR1);(IDR_TOOLBAR1);m_pctl.SetChildm_pctl.SetChild((m_toolbar.m_hWndm_toolbar.m_hWnd););
VC++ VC++ MFC ControlMFC Control
SysLink ControlSysLink ControlMFC : CLinkCtrl Class링크기능수행링크기능수행링크선택시메시지핸들러연결 & 실행SHELLEXECUTEINFO se;SHELLEXECUTEINFO se;......se lpFilese lpFile==L"httpL"http://://myaustin egloos commyaustin egloos com";";se.lpFilese.lpFile==L httpL http://://myaustin.egloos.commyaustin.egloos.com ;;ShellExecuteExShellExecuteEx(&se);(&se);
VC++ MFC VC++ MFC ControlControl
추가된 MFC 9 0추가된 MFC 9.0CMFCListCtrl , CMFCPropertyGridCtrl , CMFCShellTreeCtrl CMFCShellListCtrlCMFCShellTreeCtrl , CMFCShellListCtrl , CMenuButton , CThemedButton , CMFCLinkCtrl …
팝업팝업MFC : CMFCDesktopAlertWnd Class예) MSN메신져 아웃룩알람창예) MSN메신져, 아웃룩알람창
툴팁MFC : CMFCToolTipCtrl Class툴팁출력툴팁출력
{{ Vista Vista & MFC & MFC ControlControl }}{{ }}
고재관Microsoft MVP
VC++ VC++ 업그레이드업그레이드
VC++ 6 0 & eVC++ 4 0VC++ 6.0 & eVC++ 4.0변환전후의파일플랫폼확대플랫폼확대안전한문자열한 자열WINVER루프루프MFC & ATL메시지핸들러Class WizardClass WizardClass View
VC++VC++업그레이드업그레이드
VC++ 6 0 : Visual C++ 6 0 (Visual Studio 6 0)VC++ 6.0 : Visual C++ 6.0 (Visual Studio 6.0)오랜기간익숙하여많이사용VC++ 새로운기능이주춤하여정체VC++ 새로운기능이주춤하여정체VC++ .NET 2002, 2002, 2005로전환안됨기존개발프로그램 교육기관의교육문제기존개발프로그램, 교육기관의교육문제
eVC++ 4.0 : eMbedded Visual C++ 4.0Windows CE Toolkit for Visual C++ 5.0 시작eMbedded Visual C++ 3.0 & 4.0 독립버전독립버전최근몇년전공식지원중단.최근 Platform 미지원상태 매우불안정최근 Platform 미지원상태. 매우불안정.
VC++VC++업그레이드업그레이드
eVC++ 4 0VC++ 6 0 eVC++ 4.0 VC++ 6.0
변환전 변환후 변환전 변환후변환전 변환후 변환전 변환후
VC++VC++업그레이드업그레이드
Mobile Device의기회확대Mobile Device의기회확대eVC++ 4.0 의제한된플랫폼지원
VC 2008로변환후확대된지원플랫폼VC++ 2008로변환후확대된지원플랫폼최신버전모두지원향후버전지속지원
VC++VC++업그레이드업그레이드
안전한문자열처리기능추가작업필요안전한문자열처리기능추가작업필요빌드시 Warning메시지발생
안전한 API로교체권고함.경고메시지만없앨수있음.#define _CRT_SECURE_NO_DEPRECATE#define _CRT_SECURE_NO_DEPRECATE_ _ _ __ _ _ _
#define _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS
기존기존문자열을 NULL종료
Null TerminationNull Termination런타임 API의문제점내포Null없는등런타임중오류발생가능성Null없는등런타임중오류발생가능성
최근strcpystrcpy((tar,”abctar,”abc”);”);
최근안전한문자열처리권고안전한문자열처리 API추가strcpy_sstrcpy_s((tar,sizeoftar,sizeof(tar),”(tar),”abcabc”);”);py_py_ (( ,, ( ),( ), ););
VC++VC++업그레이드업그레이드
기존기존WINVER 미정의또는다른값 정상빌드winres h에포함winres.h에포함
VC++ 2008WINVER 정의필요 (컴파일시기본값적용)컴파일옵션 /D를통해매크로정의가능0x0500 이상의값필요#define WINVER#define WINVER 0x05000x0500#define WINVER#define WINVER 0x05000x0500
##ifdefifdef WINVERWINVER##undefundef WINVERWINVER#define WINVER 0x0500#define WINVER 0x0500##endifendif
VC++VC++업그레이드업그레이드
기존기존루프내선언은그이후에도유효for(int i=0; i<10;i++) { }for(int i=0; i<10;i++) { }
VC++ 2008
for(int i=0; i<10;i++) { … }for(int i=0; i<10;i++) { … }for( i=0; i<10;i++) { … }for( i=0; i<10;i++) { … }
VC 2008루프내선언은 Local 처리됨for(int i=0; i<10;i++) { }for(int i=0; i<10;i++) { }
변수를미리선언하여사용권장
for(int i=0; i<10;i++) { … }for(int i=0; i<10;i++) { … }for(int i=0; i<10;i++) { … }for(int i=0; i<10;i++) { … }변수를미리선언하여사용권장intint i = 0;i = 0;for(i=0; i<10;i++) { … }for(i=0; i<10;i++) { … }
기존소스코드수정불가피for(i=0; i<10;i++) { … }for(i=0; i<10;i++) { … }
VC++VC++업그레이드업그레이드
MFC Class ATL COM형태로변경MFC Class ATL COM형태로변경사용법일부변경됨
예) CSt i Cl CSt i T I t f 로변경예) CString Class CStringT Interface로변경
기존문자의 ASCII/Unicode값을직접넣을수있음CString A = 0x20;CString A = 0x20;
VC++ 2008변수를이용해처리변수를이용해처리CHAR szTemp[2]=””;CHAR szTemp[2]=””;szTemp[0] = 0x20;szTemp[0] = 0x20; 는 CSt i A T(”CSt i A T(”\\ 020”)020”)szTemp[0] = 0x20;szTemp[0] = 0x20;CString A = szTemp;CString A = szTemp;
또는 CString A = _T(”CString A = _T(”\\x020”);x020”);
VC++VC++업그레이드업그레이드
기존기존메시지핸들러의파라미터생략이허용ON MESSAGE(WM USER+1 OnUser)ON MESSAGE(WM USER+1 OnUser)ON_MESSAGE(WM_USER+1,OnUser)ON_MESSAGE(WM_USER+1,OnUser)... ... void void 클래스명클래스명::::OnUser(WPARAM wParam) { … } ...OnUser(WPARAM wParam) { … } ...
VC++ 2008void void 클래스명클래스명::::OnUser() { … }OnUser() { … } ... ...
파라미터등의생략이허용되지않음ON_MESSAGE(WM_USER+1,OnUser)ON_MESSAGE(WM_USER+1,OnUser)......LRESULT LRESULT 클래스명클래스명::::OnUser(OnUser( WPARAM wParam, WPARAM wParam,
LPARAM lParam ) LPARAM lParam ) 기존개발소스코드수정불가피
LPARAM lParam ) ...LPARAM lParam ) ...
VC++VC++업그레이드업그레이드
기존기존Class Wizard 를통한통합관리
VC++ 2008VC++ 2008통합 IDE환경구성. Class Wizard 없앰Class의속성창의아이콘을선택속성추가삭제의개념으로접근Windows Message/ Event Handler 연결UI Control Event Handler 연결연결
VC++VC++업그레이드업그레이드
기존기존Class의헤더연결Class의프로그램파일연결Class의프로그램파일연결
VC++ 2008기존동일기능수행Message/ Event Handler 연결출력기반 Class / 파생 Class 연결출력
VC++VC++업그레이드업그레이드
필요한경우코드검증도구사용필요한경우코드검증도구사용Visual Studio 2008 Team System 사용필수다양한코드검증을통해프로그램안정성확보다양한코드검증을통해프로그램안정성확보
응용프로그램검증도구 (Application Verifier)런타임에러검증도구디버그 '응용프로그램검증도구'로실행
코드분석 (Code Analysis)프로그램테스트도구프로그램테스트도구프로젝트 속성 구성속성 코드분석 ’빌드할때 C/C++에코드분석사용‘ 옵션사용때 C/C++에코드분석사용 옵션사용/analyze 옵션
{{이전프로젝트이전프로젝트변환변환 }}{{이전 젝이전 젝 변환변환 }}
고재관Microsoft MVP
정식버전정식버전2008년 2월 (인터넷다운로드개시)한글버전출시됨한글버전출시됨
Feature Pack 웹사이트를통해다운로드MFC updateTR1현재영문만됨. 한글지원버전곧출시.현재영문만됨 한글지원버전곧출시
Visual Studio 2008 Service Pack 1 ( ? )
VC++ 10VC++ 10네이티브코드기반개발자위한강력한기능Offi & Wi d UI 구현메이져역할Office & Windows UI 구현메이져역할예) Office 14 & Windows 7
Windows 새로운기능에변화예) Search & Organize예) Search & Organize
Restart ManagerPower ManagementPower Management
네이티브와관리형코드간의융합에포커스Visual C++ Visual C++ 지속성장지속성장
발표자료다운로드발표자료다운로드http://myaustin.egloos.com/1784875
VS 2008 한글판 Professional 90일버전VS 2008 한글판 Professional 90일버전http://www.microsoft.com/downloads/details.aspx?di l l k &F il ID 83 3 1 d72 4 79?displaylang=ko&FamilyID=83c3a1ec-ed72-4a79-8961-25635db0192bVC T BlVC++ Team Bloghttp://blogs.msdn.com/vcblog/
VC++ Libraries forumshttp://forums.microsoft.com/MSDN/ShowForum.ahttp://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=8&SiteID=1
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.