Download - Tour de France C++ 2005 Eric Mittelette : [email protected] Eric Vernié : [email protected] Relation Technique.

Transcript
Page 1: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Tour de France C++ 2005Tour de France C++ 2005

http://www.microsoft.com/france/visualc/http://www.microsoft.com/france/visualc/

Eric Mittelette : Eric Mittelette : [email protected]@microsoft.com

Eric Vernié : Eric Vernié : [email protected]@microsoft.com

Relation Technique DéveloppeursRelation Technique Développeurs

Page 2: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

HP Partenaire Mondial de HP Partenaire Mondial de MicrosoftMicrosoft

Intégrateur des technologies Microsoft :Intégrateur des technologies Microsoft :Plus de 10M de postes Windows 2000/XP déployés Plus de 10M de postes Windows 2000/XP déployés

Plus de 13M de postes MS Exchange 2000/2003 déployésPlus de 13M de postes MS Exchange 2000/2003 déployés

Services de support MicrosoftServices de support Microsoft

Développement conjoint de solutions verticales :Développement conjoint de solutions verticales :HP OpenBank – BanqueHP OpenBank – Banque

HP CBI.NET – Industrie HP CBI.NET – Industrie

HP ISM.NET – TelecomHP ISM.NET – Telecom

Centre d’expertise et de benchmarks dédiés MicrosoftCentre d’expertise et de benchmarks dédiés Microsoft

Un portfolio de solutions pour une infrastructure Un portfolio de solutions pour une infrastructure Microsoft étendueMicrosoft étendue

Serveurs 32 et 64 bitsServeurs 32 et 64 bits

Stockage NAS, SANStockage NAS, SAN

Postes de travail…Postes de travail… Windows Mobile Phone EditionWindows XP Edition Tablette PC

Page 3: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

AgendaAgendaIntroduction : État de l’art du C++Introduction : État de l’art du C++

C++ NatifC++ NatifCompilateurCompilateur

BibliothèquesBibliothèques

C++ et le monde .NETC++ et le monde .NETRappel sur la CLRRappel sur la CLR

Extension Managed C++Extension Managed C++

C++ / CLIC++ / CLI

Page 4: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Évolution du Visual C++Évolution du Visual C++19981998 Visual C++ 6.0Visual C++ 6.0 ATL3/MFC42 (6.0)ATL3/MFC42 (6.0)

20022002 Visual Studio .NETVisual Studio .NET

Visual C++ 7.0Visual C++ 7.0

Unified Visual Studio IDE & DebuggerUnified Visual Studio IDE & Debugger

MFC7/ATL7, attributed programming, ATL ServerMFC7/ATL7, attributed programming, ATL Server

Whole Program OptimizationWhole Program Optimization

C++ Managed ExtensionsC++ Managed Extensions

Fixed STL concurrency and DLL issuesFixed STL concurrency and DLL issues

/GS Runtime Security Check/GS Runtime Security Check

20032003 Visual Studio 2003Visual Studio 2003

Visual C++ 7.1Visual C++ 7.1

ISO Standard C++ Conformance ISO Standard C++ Conformance

/Arch:SSE/SSE2 – floating point code generation/Arch:SSE/SSE2 – floating point code generation

Windows Forms Designer for Managed ExtensionsWindows Forms Designer for Managed Extensions

20052005 Visual Studio 2005Visual Studio 2005

Visual C++ 8.0Visual C++ 8.0

C++/CLI LanguageC++/CLI Language

Integrated 64-bit Compiler and ToolsIntegrated 64-bit Compiler and Tools

Profile Guided OptimizationProfile Guided Optimization

Safe Extension for CRTSafe Extension for CRT

Project Property Manager, Source Navigation/BrowsingProject Property Manager, Source Navigation/Browsing

MFC/Windows Forms IntegrationMFC/Windows Forms Integration

Page 5: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

État de l’art du C++État de l’art du C++Non le C++ n’est pas mort Non le C++ n’est pas mort Très proche de la Norme ISO 98 (98%)Très proche de la Norme ISO 98 (98%)Évolutions Évolutions

Support du standard ISO 98Support du standard ISO 98PerformancePerformanceSécuritéSécuritéS’ouvrir au monde .NETS’ouvrir au monde .NET

« First class tool and language »« First class tool and language »Plusieurs voies pour le futurePlusieurs voies pour le future

Code Natif (SDKs MFC ATL STL…)Code Natif (SDKs MFC ATL STL…)Code Managed (Extensions et CLI)Code Managed (Extensions et CLI)DDKs : reste l’outil indispensable pour les driversDDKs : reste l’outil indispensable pour les driversEmbedded : code natif pour CEEmbedded : code natif pour CELonghorn : nouveau jeux APIs dans WinFX …longue vie au C++ !Longhorn : nouveau jeux APIs dans WinFX …longue vie au C++ !Jeux et DirectX : performances et framework au rendez vous (XNA)Jeux et DirectX : performances et framework au rendez vous (XNA)

Page 6: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Compilateur C++ et norme Compilateur C++ et norme ISOISODepuis le début Microsoft fait évoluer son compilateurDepuis le début Microsoft fait évoluer son compilateur

Norme 1998, presque atteinte, aujourd’hui:Norme 1998, presque atteinte, aujourd’hui:98% de la norme98% de la norme

Support des STL renforcéSupport des STL renforcé

Points non conforment à la norme Points non conforment à la norme

Page 7: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Portage de codePortage de codeBreaking changes (impact de la norme ANSI)Breaking changes (impact de la norme ANSI)

Spécialisation explicite (plus de redéfinition)Spécialisation explicite (plus de redéfinition)Opérateur new lève désormais des Exceptions Opérateur new lève désormais des Exceptions ( std::nothrow pour revenir comme avant)( std::nothrow pour revenir comme avant)Chaînes littéral (const char[n])Chaînes littéral (const char[n])Surcharge des Template de fonctions changentSurcharge des Template de fonctions changentKoening lookupKoening lookupInitialisation de base à 0Initialisation de base à 0Typename devient obligatoire dans les Template…Typename devient obligatoire dans les Template…Friend a changer de comportement sur les classesFriend a changer de comportement sur les classesPointeurs sur Membres requièrent un & Pointeurs sur Membres requièrent un & Using, implicit const int ont changéUsing, implicit const int ont changéPortée des déclarations de for a changé (Zc)Portée des déclarations de for a changé (Zc)I/O stream changement (#include <iostream>)I/O stream changement (#include <iostream>)……

Page 8: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

Impact de la norme ISO 98Impact de la norme ISO 98Koening lookupKoening lookup

Spécialisation partielle des TemplatesSpécialisation partielle des Templates

Initialisation Initialisation

FriendFriend

Membre et pointeurMembre et pointeur

ScopeScope

……

Page 9: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

C++ Natif : PerformancesC++ Natif : PerformancesOptions de compilationOptions de compilation

/Gy : Empaquetage des fonctions/Gy : Empaquetage des fonctions

/G7 : Pentium 4/G7 : Pentium 4

/arch:SSE[2] : (Utilisation des instructions et /arch:SSE[2] : (Utilisation des instructions et registres SSE)registres SSE)

WPO /GL et /LTCG au link (Optimisation du code)WPO /GL et /LTCG au link (Optimisation du code)

PGO (Optimisation par instrumentation du code) PGO (Optimisation par instrumentation du code)

Floating point Model /fpFloating point Model /fp

Intrinsec /Oi Intrinsec /Oi

OpenMP : pragma pour le code multi processeurOpenMP : pragma pour le code multi processeur

Page 10: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

PGO en détail…PGO en détail…La création d'une application PGO s'effectue en trois La création d'une application PGO s'effectue en trois grandes phases : grandes phases : Compilation en code instrumenté. Compilation en code instrumenté. Formation du code instrumenté ; Formation du code instrumenté ; Recompilation en code optimisé. Recompilation en code optimisé.

Page 11: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

C++ Natif : SécuritéC++ Natif : SécuritéOptions de compilationOptions de compilation

SécuritéSécurité/GS : prévention des débordements de tampon…./GS : prévention des débordements de tampon….

/RTC : aide au débogage du code/RTC : aide au débogage du code

Analyse de codeAnalyse de code/prefast : identifie les leak, débordement de tampon…./prefast : identifie les leak, débordement de tampon….

CRT SécuriséeCRT SécuriséeCRT sécurisé : ~ 400 modificationsCRT sécurisé : ~ 400 modifications

Par exemple : strcpy devient strcpy_sPar exemple : strcpy devient strcpy_s

Fonction « non sure » dépréciées par défautFonction « non sure » dépréciées par défaut#define _CRT_SECURE_NO_DEPRECATE#define _CRT_SECURE_NO_DEPRECATE

STL SécuriséeSTL SécuriséeItérateurs STL détectent les débordements de tamponItérateurs STL détectent les débordements de tampon

Page 12: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Linker...Linker...Options du Linker ajoutées :Options du Linker ajoutées :

/ASSEMBLYDEBUG /ASSEMBLYDEBUG

génère l’attribut Debuggable et désactive les génère l’attribut Debuggable et désactive les optimisations JIT.optimisations JIT.

/ASSEMBLYLINKRESOURCE /ASSEMBLYLINKRESOURCE

Créé un lien vers une ressource dans le fichier de sortieCréé un lien vers une ressource dans le fichier de sortie/DELAYSIGN/DELAYSIGN

Place uniquement la public key dans assembly Place uniquement la public key dans assembly /KEYFILE/KEYFILE

Fichier contenant la clé Fichier contenant la clé /KEYCONTAINER/KEYCONTAINER

Container de la clé Container de la clé /SAFESEH /SAFESEH

Avec /SAFESEH le linker produit uniquement une image si on peut Avec /SAFESEH le linker produit uniquement une image si on peut générer une table des “safe exception handlers”. Cette table générer une table des “safe exception handlers”. Cette table spécifie quels handlers seront utilisés pour l’image.spécifie quels handlers seront utilisés pour l’image.

Page 13: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Compilateur, Linker...Compilateur, Linker...#Import#Import

De nouvelles options pour #import : De nouvelles options pour #import : auto_searchauto_search

Si la librairie importée contient des #import Si la librairie importée contient des #import (importation en cascade). (importation en cascade).

auto_renameauto_rename

Quand le mot clé de la librairie est un mot clé Quand le mot clé de la librairie est un mot clé réservé du C++, __ est ajouté devant le nom. réservé du C++, __ est ajouté devant le nom.

no_search_namespace, rename_search_namespace, tlbidno_search_namespace, rename_search_namespace, tlbid

Gestion plus fine des imports et nom de Gestion plus fine des imports et nom de namespaces. namespaces.

Page 14: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

Options de compilationOptions de compilationSécuritéSécurité

Buffer OverrunBuffer Overrun

Analyse statique de codeAnalyse statique de code

str_safestr_safe

RTC checkRTC check

PerformancesPerformancesWPOWPO

PGOPGO

Page 15: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

PausePause

Retour dans 20 minutesRetour dans 20 minutes

Les speakers sont dans l’escalier !Les speakers sont dans l’escalier !

Page 16: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

BibliothèquesBibliothèques

Microsoft propose depuis ~20 ans des Microsoft propose depuis ~20 ans des librairies:librairies:

Les MFC évoluent et se maintiennent comme Les MFC évoluent et se maintiennent comme classe librairies générant du code natif classe librairies générant du code natif

version non managée uniquementversion non managée uniquement

ATL, continue son évolution vers STLATL, continue son évolution vers STLApparaît comme Serveur WEB avec ATL ServerApparaît comme Serveur WEB avec ATL Server

Page 17: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MFCMFC

MFC V7.0MFC V7.0

•Crées dés les premières versions de Visual C++Crées dés les premières versions de Visual C++•Objectifs :Objectifs :

•Encapsuler les API Windows dans des Encapsuler les API Windows dans des classes C++classes C++•Propose une architecture Vue/ContrôleurPropose une architecture Vue/Contrôleur

Document <> (n) VuesDocument <> (n) Vues

Page 18: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MFCMFCChangements MFC 7 et 7.1:Changements MFC 7 et 7.1:

Connection mapsConnection maps ne sont plus compactées lors de la ne sont plus compactées lors de la suppression d’un suppression d’un connection pointconnection point . Ainsi le connection point . Ainsi le connection point supprimé est placé à NULL. On doit donc tester NULL quand on supprimé est placé à NULL. On doit donc tester NULL quand on utilise :utilise :

CConnectionPoint::GetConnections CConnectionPoint::GetConnections ConnectionPoint::GetNextConnection. ConnectionPoint::GetNextConnection.

Les fonctions suivantes Les fonctions suivantes lèventlèvent maintenant des exceptions: maintenant des exceptions: CSimpleString::FreeExtraCSimpleString::FreeExtraCSimpleString::GetAtCSimpleString::GetAtCSimpleString::operator []CSimpleString::operator []CSimpleString::ReleaseBufferCSimpleString::ReleaseBufferCSimpleString::ReleaseBufferSetLengthCSimpleString::ReleaseBufferSetLengthCStrBuf::SetLengthCStrBuf::SetLengthCTime::CTime constructors. CTime::CTime constructors.

Page 19: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MFCMFC

CAsyncSocket supporte IPv6-via les membres:CAsyncSocket supporte IPv6-via les membres: GetPeerNameEx, GetSockNameEx, ReceiveFromEx, et GetPeerNameEx, GetSockNameEx, ReceiveFromEx, et SendToEx.SendToEx.

La classe CImage check le nombres d’objets créés. La classe CImage check le nombres d’objets créés. Quand le décompte vaut 0, La fonction GdiplusShutdown est Quand le décompte vaut 0, La fonction GdiplusShutdown est automatiquement appelée pour libérer les ressources GDI+automatiquement appelée pour libérer les ressources GDI+

(« pil poil » pour les objets créés dans une DLL :-)(« pil poil » pour les objets créés dans une DLL :-)

La classe CString a été réécrite sous forme de Template: La classe CString a été réécrite sous forme de Template: CStringTCStringT

On peut donc l’utiliser dans des projets ATL sans un lien “trop On peut donc l’utiliser dans des projets ATL sans un lien “trop lourd” aux MFC. lourd” aux MFC.

Page 20: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MFC / ATL : Partage de MFC / ATL : Partage de classesclasses

Page 21: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Futur des MFCFutur des MFC

Reste « The » bibliothèque native C++ de la Reste « The » bibliothèque native C++ de la plate forme Windowsplate forme Windows

Continue d’évoluer en MFC 8.0 (détails à venir)Continue d’évoluer en MFC 8.0 (détails à venir)

Travail d’optimisation sur l’intégration Travail d’optimisation sur l’intégration MFC/NETMFC/NET

Intégration des contrôles WindowsForm dans les Intégration des contrôles WindowsForm dans les dialogues MFCdialogues MFC

Intégrer aux mécanismes DDX, DDX_ManagedControlIntégrer aux mécanismes DDX, DDX_ManagedControl

Intégration des WindowsForm dans les CViewsIntégration des WindowsForm dans les CViews

Un namespace : Un namespace : Microsoft::VisualC::MFC Microsoft::VisualC::MFC

Page 22: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Futur des MFCFutur des MFC

Win32/MFC Windows hosting AvalonWin32/MFC Windows hosting AvalonXAML as Dialog, Wizards, Task Panes, etc.XAML as Dialog, Wizards, Task Panes, etc.

XAML as MFC ViewsXAML as MFC Views

Visuals for RenderingVisuals for Rendering

Animations and MultimediaAnimations and Multimedia

Avalon Hosting Win32/MFC WindowsAvalon Hosting Win32/MFC WindowsXAML as top level windowXAML as top level window

Win32/MFC Windows as Avalon controlWin32/MFC Windows as Avalon control

Avalon Hosting ActiveX ControlsAvalon Hosting ActiveX Controls

Page 23: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Futur MFC et XAMLFutur MFC et XAML

MFC hosting XAML Page in CControlBar as Task PaneCMDIChild hosting XAML Page as Child WindowXAML Page hosting MFC CView as Element

Page 24: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

ATLATLVersion 7.1/8 dans Visual Studio 2003/2005Version 7.1/8 dans Visual Studio 2003/2005

A l’origine pour créer des objets ActiveXA l’origine pour créer des objets ActiveXFaciliter la création d’objet COM par des Templates de code C++Faciliter la création d’objet COM par des Templates de code C++

Page 25: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

ATLATLS’ouvre au WEBS’ouvre au WEB

ATL Web ServiceATL Web Service

S’ouvre aux librairies graphiquesS’ouvre aux librairies graphiquesATL Windowing et WTLATL Windowing et WTL

Exploite la programmation par attributsExploite la programmation par attributsExiste depuis l’origine de l’IDL (coclass)Existe depuis l’origine de l’IDL (coclass)

Ajout de nouveaux attributs :Ajout de nouveaux attributs :event_source, event_receiver pour les connection pointsevent_source, event_receiver pour les connection points

[ soap_method ] Pour les services Web[ soap_method ] Pour les services Web

……

Un premier pas vers AOPUn premier pas vers AOPTraitement des Attributs ~ Code produit par TisseursTraitement des Attributs ~ Code produit par Tisseurs

… … A suivre !A suivre !

Page 26: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

ATLATLNouveautés des versions 7 et 7.1Nouveautés des versions 7 et 7.1SécuritéSécurité

ATL7 propose des wrappers pour les win32API de ATL7 propose des wrappers pour les win32API de sécurité.sécurité.

FichiersFichiersCAtlFile CAtlTemporaryFile CAtlFileMappingBase/CAtlFileMappingCAtlFile CAtlTemporaryFile CAtlFileMappingBase/CAtlFileMapping

ThreadingThreadingCWorkerThread<Win32ThreadTraits|CRTThreadTraits>:CWorkerThread<Win32ThreadTraits|CRTThreadTraits>:

De nouvelles collectionsDe nouvelles collectionsCAtlArray/CAtlList, CAtlArray/CAtlList, CRBTree/CRBMap CAtlArray/CAtlList, CAtlArray/CAtlList, CRBTree/CRBMap /CRBMultiMap/CRBMultiMap

CStringCStringCStringT version TemplateCStringT version Template

Page 27: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

ATLATLVersion 8.0 (VS2005)Version 8.0 (VS2005)

Détails des classes ajoutées et modifiées dans Détails des classes ajoutées et modifiées dans les mois qui viennent (post Beta2)les mois qui viennent (post Beta2)

Page 28: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

STLSTLSTL = Ensemble de headers définit par la norme STL = Ensemble de headers définit par la norme

50 headers requis (+2 optionnels)50 headers requis (+2 optionnels)

+ 18 headers du C standard+ 18 headers du C standard

Page 29: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

STLSTL

Mise à jour de l’implémentation de la STL: Mise à jour de l’implémentation de la STL: hash_map Class hash_map Class hash_set Class hash_set Class Optional exception handling support. Optional exception handling support. Amélioration code formatting (readability). Amélioration code formatting (readability). Amélioration du support des DLL Amélioration du support des DLL

(passage d’objet entre process). (passage d’objet entre process).

Amélioration du support multithreading. Amélioration du support multithreading. Amélioration de la conformité aux standards. Amélioration de la conformité aux standards.

Using namespace std;Using namespace std;Iostream.h dépréciéeIostream.h dépréciée

Page 30: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

STLSTL

Migration depuis VC++ 6.0 Migration depuis VC++ 6.0 Problèmes potentiels: Problèmes potentiels:

Changements des reverse_iteratorChangements des reverse_iterator

Changement des MIN/MAX #defineChangement des MIN/MAX #define

Certains Itérateurs ne sont plus des pointeurs…Certains Itérateurs ne sont plus des pointeurs…

Page 31: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Futur des STLFutur des STL

Version 8.0 (VS2005)Version 8.0 (VS2005)Détails des classes ajoutées et modifiées dans Détails des classes ajoutées et modifiées dans les mois qui viennent (post Beta2)les mois qui viennent (post Beta2)

Apparition des CLI-STLApparition des CLI-STLPermettra a vos codes actuels basés sur STL d’être Permettra a vos codes actuels basés sur STL d’être full managedfull managed

Challenge de performance vs Collections actuelles Challenge de performance vs Collections actuelles du Frameworkdu Framework

A suivre plus tard (Post RTM ?)A suivre plus tard (Post RTM ?)

Page 32: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

API Win32 : DPAPIAPI Win32 : DPAPIData Protection API Data Protection API

Renforcée sur 2003, lancé depuis 2000Renforcée sur 2003, lancé depuis 2000Encapsulation C# dispo sur MSDNEncapsulation C# dispo sur MSDNhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/secmod/htmlhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/secmod/html/secmod21.asp/secmod21.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/strsafe.asphttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/strsafe.asp

Page 33: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

WTL…WTL…Windows Template LibraryWindows Template Library

Né de l’ATL WindowingNé de l’ATL WindowingUne forme plus légère que les MFCUne forme plus légère que les MFCHybride ATL/MFC/WTL possibleHybride ATL/MFC/WTL possiblePas d’architecture Doc/Vue (mais exemple sur le Web)Pas d’architecture Doc/Vue (mais exemple sur le Web)Pas de support « officiel » de MicrosoftPas de support « officiel » de Microsoft

““You need to know MFC, and know it well enough that you understand You need to know MFC, and know it well enough that you understand what's behind the message map macros, and can edit the code marked "DO what's behind the message map macros, and can edit the code marked "DO NOT EDIT" with no problems. You need to know Win32 API programming, NOT EDIT" with no problems. You need to know Win32 API programming, and know it well” – M Dunn (Code Project)and know it well” – M Dunn (Code Project)

Lien pour le download : version 7.0Lien pour le download : version 7.0http://www.microsoft.com/downloads/details.aspx?familyid=128e26ee-2112-4cf7-b28e-7727dhttp://www.microsoft.com/downloads/details.aspx?familyid=128e26ee-2112-4cf7-b28e-7727d9a1f288&languageid=f49e8428-7071-4979-8a67-3cffcb0c2524&displaylang=en9a1f288&languageid=f49e8428-7071-4979-8a67-3cffcb0c2524&displaylang=en

Lien pour le Wizard 7.1Lien pour le Wizard 7.1http://www.codeproject.com/useritems/wtl_71_wizard.asphttp://www.codeproject.com/useritems/wtl_71_wizard.asp

Pour en savoir plus :Pour en savoir plus :http://groups.yahoo.com/group/wtl/http://groups.yahoo.com/group/wtl/

Page 34: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

BibliothèquesBibliothèquesMFCMFC

STLSTL

WTLWTL

ATL Service Web ATL Service Web qui connaît les services Web ?qui connaît les services Web ?

Un petit rappel ?Un petit rappel ?

Page 35: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

C++ et le monde .NETC++ et le monde .NET.NET sur tous nos Systèmes.NET sur tous nos Systèmes

.NET expose une énorme Bibliothèque de .NET expose une énorme Bibliothèque de classesclasses

Plus de 8000 classes extensiblesPlus de 8000 classes extensibles

VS2003 cible le Fx 1.1VS2003 cible le Fx 1.1

VS2005 cible le Fx 2.0 (en 32 et 64 bits)VS2005 cible le Fx 2.0 (en 32 et 64 bits)

Page 36: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Rappel sur la CLRRappel sur la CLR

CLR : Virtual Execution System (VES)CLR : Virtual Execution System (VES)Exécute du code managéExécute du code managé

Fournis une couche entre code Managé et les Fournis une couche entre code Managé et les API natives de l’OSAPI natives de l’OS

Responsable du chargement et de l’exécution Responsable du chargement et de l’exécution des programmes…des programmes…

Fournis un ensemble de services …Fournis un ensemble de services …Garbage CollectorGarbage Collector

SécuritéSécurité

Compilation à la voléeCompilation à la volée

……

Page 37: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

C’est quoi .NET par rapport à la CLR ?C’est quoi .NET par rapport à la CLR ?

.NET est la combinaison :.NET est la combinaison :Runtime : CLR (Common Langage Runtime)Runtime : CLR (Common Langage Runtime)

Librairies : Framework Class LibraryLibrairies : Framework Class Library

Permet de connecter des applications via les Permet de connecter des applications via les services Web XMLservices Web XML

Page 38: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

The big pictureThe big pictureApplication .NET

Memory

DLL

ManagedCode : Assembly

CLR

UnmanagedCode

Win32

COMCOM+ 1.0

Services•JIT Compilation•Sécurité•Base Classes

Process WIN32 Application .NETApplication .NETManaged MemoryManaged Memory

Managed ExécutionManaged Exécution

Notion d’ AssemblyNotion d’ Assembly

Managed Memory

GC

Heap

Page 39: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Chargement de la CLRChargement de la CLR

Espace d’adressageProcess WIN32

En-tête PEEn-tête PEEn-tête PEEn-tête PE

Section .textSection .textSection .textSection .text

Section .idataSection .idataSection .idataSection .idata

En-tête CLREn-tête CLREn-tête CLREn-tête CLR

ILILILIL

MétadonnéeMétadonnéeMétadonnéeMétadonnée

DLL : DLL : MSCorEE.dllMSCorEE.dllFonction: _CorExemainFonction: _CorExemainDLL : DLL : MSCorEE.dllMSCorEE.dllFonction: _CorExemainFonction: _CorExemain

JMP _CorExeMainJMP _CorExeMainJMP _CorExeMainJMP _CorExeMain

Le thread principalLe thread principaldu processus démarredu processus démarre

Le thread principalLe thread principaldu processus démarredu processus démarre

EXE .NETEXE .NETEXE .NETEXE .NET

MSCorEE.dllMSCorEE.dllMSCorEE.dllMSCorEE.dll

_CorExemain_CorExemain_CorExemain_CorExemain

Void Main (string args[])Void Main (string args[])Void Main (string args[])Void Main (string args[])

Page 40: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

CLR : Vue d’ensemble CLR : Vue d’ensemble

Class Loader

IL to NativeCompilers

CodeManager

GarbageCollector

Security Engine Debug Engine

Type Checker Exception Manager

Thread Support COM Marshaler

Base Class Library Support

Page 41: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

.NET Framework.NET Framework

System

Globalization

Diagnostics

Configuration

Collections

Resources

Reflection

Net

IO

Threading

Text

ServiceProcess

Security Runtime

InteropServices

Remoting

Serialization

System.Data

Design

ADO

SQLTypes

SQL

System.Xml

XPath

XSLT Serialization

System.WinForms

Design ComponentModel

System.Drawing

Imaging

Drawing2D

Text

Printing

System.Web

Configuration SessionState

Caching Security

Services

Description

Discovery

Protocols

UI

HtmlControls

WebControls

Page 42: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

JIT CompilationJIT CompilationEspace d’adressage

ConsoleConsoleConsoleConsole

Code IL

Static void WriteLine(string)

Allocation mémoireAllocation mémoireAllocation mémoireAllocation mémoire

Instructions natives du processus

MOV AX , BXMOV AX , BX……

MOV AX , BXMOV AX , BX……

Compilation du code ILCompilation du code ILCompilation du code ILCompilation du code IL

Page 43: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Espace d’adressageConsoleConsoleConsoleConsole

Code Natif

Static void WriteLine(string)

MOV AX , BXMOV AX , BX……

MOV AX , BXMOV AX , BX……

Page 44: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

CompilerCompiler AssemblyAssemblyAssemblyAssembly

DEVELOPMENTDEVELOPMENT

MC++MC++C#C#J#J#VBVB

CobolCobol……

MSILMSILMetadataMetadata

ResourcesResources

public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); }}

public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); }}

Source codeSource code

ApplicationApplicationDirectoryDirectory

ApplicationApplicationDirectoryDirectory

GlobalGlobalAssemblyAssembly

Cache (GAC)Cache (GAC)

GlobalGlobalAssemblyAssembly

Cache (GAC)Cache (GAC)

DéploiementDéploiement

AssemblyAssemblyAssemblyAssembly

DEVELOPMENTDEVELOPMENT DEPLOYMENTDEPLOYMENT

SetupSetupCopyCopy

BrowserBrowser

Download Download CacheCache

Download Download CacheCache

InstallInstall

Page 45: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Debug EngineDebug Engine

IL to NativeIL to NativeCompilerCompiler

ApplicationApplicationDirectoryDirectory

ApplicationApplicationDirectoryDirectory

SetupSetupCopyCopy

BrowserBrowser

Download Download CacheCache

Download Download CacheCache

GlobalGlobalAssemblyAssembly

Cache (GAC)Cache (GAC)

GlobalGlobalAssemblyAssembly

Cache (GAC)Cache (GAC)

AssemblyAssemblyon Target on Target MachineMachine

AssemblyAssemblyon Target on Target MachineMachine

ExécutionExécution

AssemblyAssemblyAssemblyAssembly

DEVELOPMENTDEVELOPMENT DEPLOYMENTDEPLOYMENT

InstallInstall

EXECUTIONEXECUTION

AssemblyAssemblyLoaderLoaderSecuritySecurityClass Class

LoaderLoader

Native .exe Native .exe + GC table + GC table Native .exe Native .exe + GC table + GC table

Code Code ManagerManager

Garbage CollectionGarbage Collection

Exception ManagerException Manager

Thread SupportThread Support

COM InteropCOM Interop

Policy<?xml version="1.0" encoding="utf-8" ?><configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissions and forms the root of the code group tree."> <IMembershipCondition class="AllMembershipCondition" version="1"/> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"

Page 46: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

Code MSILCode MSIL

Rotor et le fonctionnement du VESRotor et le fonctionnement du VESDisponible sur le site MSDNDisponible sur le site MSDNhttp://msdn.microsoft.com/msdnmag/issues/02/07/SharedSourceCLI/http://msdn.microsoft.com/msdnmag/issues/02/07/SharedSourceCLI/

Page 47: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

VS2003:VS2003:Extension Managed C++Extension Managed C++

Extension managée pour le C++ Extension managée pour le C++ /CLR : émettre de l’IL plutôt que du binaire/CLR : émettre de l’IL plutôt que du binaire

15 nouveaux mot clés15 nouveaux mot clés

Va nous permettre de réutiliser du code Va nous permettre de réutiliser du code CPP existant…CPP existant…

Unique sur la plate forme .NET !Unique sur la plate forme .NET !

Page 48: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Extension Managed C++Extension Managed C++__abstract__abstract Déclaration d'une classe abstraite, qui ne saurait être Déclaration d'une classe abstraite, qui ne saurait être

instanciée directementinstanciée directement

__box__box"Boxing" automatique, comme en C# et VB.NET, c'est-"Boxing" automatique, comme en C# et VB.NET, c'est-

à-dire création d'une copie sur le tas (heap) d'une à-dire création d'une copie sur le tas (heap) d'une classe __value (cf. ci-dessous).classe __value (cf. ci-dessous).

__delegate__delegate Définition d'un type délégué (une sorte de pointeur de Définition d'un type délégué (une sorte de pointeur de méthode)méthode)

__event__event

Même nuance qu'en VB.NET et C# : un événement est Même nuance qu'en VB.NET et C# : un événement est une sorte de __delegate sur lequel les instances une sorte de __delegate sur lequel les instances d'autres classes n'ont qu'un pouvoir d'autres classes n'ont qu'un pouvoir d'abonnement / désabonnement. Ils ne peuvent en d'abonnement / désabonnement. Ils ne peuvent en aucun cas être la source de cet événement, ni en aucun cas être la source de cet événement, ni en écraser la liste des abonnés.écraser la liste des abonnés.

__finally__finally Comble une lacune de C++, qui ne dispose pas de bloc Comble une lacune de C++, qui ne dispose pas de bloc "finally""finally"

__gc__gcC'est le mot clé tant attendu : les instances de classes C'est le mot clé tant attendu : les instances de classes

__gc sont libérées automatiquement de la __gc sont libérées automatiquement de la mémoire par le Garbage Collectormémoire par le Garbage Collector

__identifier__identifierTechnique obscure qui permet d'employer un mot Technique obscure qui permet d'employer un mot

réservé du C++ comme identificateur (de réservé du C++ comme identificateur (de méthode, de variable...)méthode, de variable...)

Page 49: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Extension Managed C++Extension Managed C++

__interface__interface

C++ permet de déclarer des classes, qui ne C++ permet de déclarer des classes, qui ne contiennent éventuellement que des méthodes contiennent éventuellement que des méthodes virtuelles pures. Ce mot clé va un peu plus loin et virtuelles pures. Ce mot clé va un peu plus loin et ajoute la compréhension des interfaces au C++.ajoute la compréhension des interfaces au C++.

__nogc__nogc

Déclaration d'une classe C++ native, dont les Déclaration d'une classe C++ native, dont les instances ne seront pas libérées instances ne seront pas libérées automatiquement par le Garbage Collector. Notez automatiquement par le Garbage Collector. Notez que ce choix est celui par défaut : que ce choix est celui par défaut :

__pin__pin Le "Pinning" est une astuce qui permet d'empêcher le Le "Pinning" est une astuce qui permet d'empêcher le Garbage Collector de libérer un objet __gcGarbage Collector de libérer un objet __gc

__property__propertyDéfinit une propriété sur une classe __gc (qui peut Définit une propriété sur une classe __gc (qui peut

être, comme d'habitude, en lecture seule ou en être, comme d'habitude, en lecture seule ou en lecture-écriture)lecture-écriture)

__sealed__sealedInterdit de sous classer une classe __gc ou de redéfinir Interdit de sous classer une classe __gc ou de redéfinir

une méthode d'une classe __gc. Les développeurs une méthode d'une classe __gc. Les développeurs Java comprendront "static".Java comprendront "static".

__try_cast__try_cast Tentative de cast. Si elle échoue, cette expression Tentative de cast. Si elle échoue, cette expression lance une exception.lance une exception.

__typeof__typeof

Renvoie le type (System::Type) d'un objet donné. C'est Renvoie le type (System::Type) d'un objet donné. C'est un peu ce que l'on appelait RTTI (RunTime Type un peu ce que l'on appelait RTTI (RunTime Type Information) en C++ standard, à ceci près que la Information) en C++ standard, à ceci près que la Réflexion .NET est beaucoup plus riche.Réflexion .NET est beaucoup plus riche.

Page 50: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Classes managéesClasses managées

Classes et InterfacesClasses et Interfaces__gc __gc __nogc (par défaut)__nogc (par défaut)__interface__interface

Remplace les classes Remplace les classes virtuelles abstraites puresvirtuelles abstraites pures

Gestion des PropriétésGestion des Propriétés__property__property

get_XXX et set_XXXget_XXX et set_XXX

Page 51: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Compilation du MC++Compilation du MC++/CLR en option du compilateur/CLR en option du compilateur

Switches incompatibles avecSwitches incompatibles avec /clr/clr/GL/GL - Link Time Code Generation. - Link Time Code Generation. /Zd/Zd - Generate COFF debug information. - Generate COFF debug information. /ZI/ZI - Support "Edit and Continue&1uot; in debug information. - Support "Edit and Continue&1uot; in debug information. /ML - (/MLd)/ML - (/MLd) - Link statically to the CRT (debug). - Link statically to the CRT (debug). /Gm -/Gm - Enable Minimal rebuild. Enable Minimal rebuild. /YX/YX - Automatic use of precompiled headers. - Automatic use of precompiled headers. /RTCc/RTCc - Runtime error check for possible data loss in conversion. - Runtime error check for possible data loss in conversion. /RTCs/RTCs - Stack Frame runtime error checking. - Stack Frame runtime error checking. /RTCu/RTCu - Runtime error check for use of unintialized variable. - Runtime error check for use of unintialized variable. /RTC1/RTC1 - Equivalent to /RTCsu. - Equivalent to /RTCsu.

Page 52: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

B.A.BA du Managed C++B.A.BA du Managed C++

Point-cerclePoint-cercle

Utilisation des classes du Framework.NETUtilisation des classes du Framework.NET

Page 53: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Rappel CLRRappel CLR

Gestion de la mémoire .NetGestion de la mémoire .NetGarbage CollectorGarbage Collector

Managed Heap : Heap privé géré par la CLRManaged Heap : Heap privé géré par la CLR

Basé sur des générationsBasé sur des générationsLes objets survivants a une collecte sont promus dans la Les objets survivants a une collecte sont promus dans la génération suivante (gen0, gen1 et gen2)génération suivante (gen0, gen1 et gen2)

Un Heap pour les « large object » (>80 000 octets)Un Heap pour les « large object » (>80 000 octets)

Destruction vs Finalizer et Dispose patternDestruction vs Finalizer et Dispose pattern

Page 54: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

CLR et C++CLR et C++

Destruction des objetsDestruction des objets : :

Rien dans la classeRien dans la classeImpossible de libérer les ressources OS (fichier…) !Impossible de libérer les ressources OS (fichier…) !

La mémoire elle, sera libérée…La mémoire elle, sera libérée…

~MaClasse ~MaClasse Pas un vrai destructeur (MC++) : pas de libération Pas un vrai destructeur (MC++) : pas de libération mémoiremémoire

Appelé si : delete p;Appelé si : delete p;

Appelé a la fin du process !Appelé a la fin du process !

Créé en fait un Finalizer… (évolution CLI/C++ 2005)Créé en fait un Finalizer… (évolution CLI/C++ 2005)

Page 55: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

CLR et C++CLR et C++Destruction des objetsDestruction des objets

FinalizerFinalizerCrée automatiquement si un destructeur existeCrée automatiquement si un destructeur existe

Mis dans une queue : FinalizeQueue (Résurrection Mis dans une queue : FinalizeQueue (Résurrection possible)possible)

Impact sur les performances…si beaucoup d’objets…Impact sur les performances…si beaucoup d’objets…

Invoqué par un appel à : Invoqué par un appel à : delete p;delete p;

Collection du GCCollection du GC

Unload d’un appdomainUnload d’un appdomain

Implémenter IDisposeImplémenter IDisposep.Dispose();p.Dispose();

Évite/Complément à la mécanique des FinalizerÉvite/Complément à la mécanique des Finalizer

Page 56: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MC++ et pointeursMC++ et pointeursPointeurs managésPointeurs managés

Déclarer avec __gcDéclarer avec __gc

Pas d’arithmétique de pointeursPas d’arithmétique de pointeurs

Page 57: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

Destructions des objets .NETDestructions des objets .NET

SOSSOS

Page 58: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interopérabilité Managed/UnmanagedInteropérabilité Managed/Unmanaged

It Just Work (IJW) It Just Work (IJW) Réutilise votre code sans modificationRéutilise votre code sans modification

Mixte au niveau du source:Mixte au niveau du source:pin pointerpin pointer#pragma unmanaged#pragma unmanagedClasses de serviceClasses de service

GC,MarshalGC,Marshal

PInvokePInvokeAppel des API de la plateforme ou de vos librairiesAppel des API de la plateforme ou de vos librairies

COM InteropCOM InteropBâtit sur PInvokeBâtit sur PInvoke

Hosting de la CLRHosting de la CLRLa CLR vu comme un objet COM..La CLR vu comme un objet COM..Utilisation dans des scénarii particuliersUtilisation dans des scénarii particuliers

Page 59: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : It Just Work (IJW)Interop : It Just Work (IJW)

Permet une migration rapide des codes Permet une migration rapide des codes unmanaged vers du managedunmanaged vers du managed

Va générer les fonctions de wrapping automatiquementVa générer les fonctions de wrapping automatiquement

Ré utilisation des codes « as is »Ré utilisation des codes « as is »

/CLR étant établis, possibilité d’ajout de fonctionnalités /CLR étant établis, possibilité d’ajout de fonctionnalités managéesmanagées

Page 60: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : It Just Work (IJW)Interop : It Just Work (IJW) Performance ?Performance ?

Un cas intéressant le portage de Quake II par Un cas intéressant le portage de Quake II par vertigo softwarevertigo software

http://www.vertigosoftware.com/Quake2.htmhttp://www.vertigosoftware.com/Quake2.htmPortage en Managed (it just work)Portage en Managed (it just work)Ajout de code Managed (Radar)Ajout de code Managed (Radar)

Page 61: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

IJW et du code MFCIJW et du code MFC

IJW et Quake IIIJW et Quake II

Page 62: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : __pin PointerInterop : __pin Pointer

Pointeurs __pin :Pointeurs __pin :ManagedClass __pin* ppMC = new ManagedClass();ManagedClass __pin* ppMC = new ManagedClass();

Permet de garantir que le pointeur reste valable même si le Permet de garantir que le pointeur reste valable même si le garbage collector est actifgarbage collector est actif

Fige la zone mémoire : Fige la zone mémoire : impact sur la fragmentation mémoire et les performances…impact sur la fragmentation mémoire et les performances…

’’Unpin’  explicit : Unpin’  explicit : Par simple remise à zéro du pinPointeur Par simple remise à zéro du pinPointeur

ppMC = 0;ppMC = 0;

Implicit également, en sortant du bloc de codeImplicit également, en sortant du bloc de codeY compris en cas d’erreurY compris en cas d’erreur

Page 63: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : __pin Pointer Interop : __pin Pointer Permet des passages Managed/UnManagedPermet des passages Managed/UnManaged

Data membre ou instance d’objet Managed passé Data membre ou instance d’objet Managed passé à du code unmanagedà du code unmanaged

Page 64: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : PragmaInterop : Pragma

#pragma unmanaged#pragma unmanaged

#pragma managed#pragma managedPermet d’avoir simultanément du MSIL et du Permet d’avoir simultanément du MSIL et du binaire dans la même assemblybinaire dans la même assembly

Réutilisation du code C ++ existant par simple Réutilisation du code C ++ existant par simple copier/collercopier/coller

Permet la création de « bridge et wrapper » Permet la création de « bridge et wrapper » entre monde managed et unmanagedentre monde managed et unmanaged

Page 65: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

InteropServices::Marshal InteropServices::Marshal classclass

Ensemble de méthodes statiques, utilisées pour le Ensemble de méthodes statiques, utilisées pour le marshalling « custom » et complexe.marshalling « custom » et complexe.

Utilisées dans l’interopérabilité COMUtilisées dans l’interopérabilité COMCas des structures contenant des pointeurs, Cas des pointeurs Cas des structures contenant des pointeurs, Cas des pointeurs de fonctions…de fonctions…

Équivalence des chaînes de caractères :Équivalence des chaînes de caractères :

wtypes.hwtypes.h C++C++ MC++MC++

CHARCHAR charchar CharChar

LPSTRLPSTR char*char* String* [in]String* [in]

LPCSTRLPCSTR const char*const char* String*String*

LPWSTRLPWSTR wchar_t*wchar_t* String* [in]String* [in]

StringBuilder* [in,out]StringBuilder* [in,out]

LPCWSTRLPCWSTR const wchar_t*const wchar_t* String*String*

Page 66: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : PInvokeInterop : PInvoke

PInvoke:PInvoke:Les dlls Windows déclarent des fonctions Les dlls Windows déclarent des fonctions « exportées »« exportées »

__declspec ou dans le fichier .def__declspec ou dans le fichier .def

Le linker détecte ces informations et génère une table dans la Le linker détecte ces informations et génère une table dans la lib correspondante (avec les symboles et adresses relatives).lib correspondante (avec les symboles et adresses relatives).

On peut appeler les dll de 2 manières (au chargement ou On peut appeler les dll de 2 manières (au chargement ou dynamiquement). dynamiquement).

Dynamiquement on passe par LoadLibrary() et Dynamiquement on passe par LoadLibrary() et GetProcAdress() qui retourne un pointeur de fonction.GetProcAdress() qui retourne un pointeur de fonction.

PInvoke fait ce travail de LoadLibrary(), PInvoke fait ce travail de LoadLibrary(), GetProcAdress en utilisant le mécanisme de GetProcAdress en utilisant le mécanisme de « delay loading » « delay loading »

On attend un appel explicite à la fonction pour charger la dll en On attend un appel explicite à la fonction pour charger la dll en mémoire.mémoire.

Page 67: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : PInvokeInterop : PInvoke

System::Runtime::InteropServices::DllImport permet de System::Runtime::InteropServices::DllImport permet de marquer une fonction comme existant dans le namespace marquer une fonction comme existant dans le namespace courant mais possédant son implémentation dans une dll courant mais possédant son implémentation dans une dll externe.externe.

DllimportDllimport

Voir EntryPoint pour renommer les fonctions importéesVoir EntryPoint pour renommer les fonctions importées

Page 68: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : PInvokeInterop : PInvokeOn peut recevoir des call back via PInvokeOn peut recevoir des call back via PInvoke

On travail avec des delegatesOn travail avec des delegates

Gestion des structures :Gestion des structures :

Blittable types : Blittable types :

même représentation mémoire dans les 2 mondesmême représentation mémoire dans les 2 mondes

Marshalling automatique , Idem pour les structures, tableaux Marshalling automatique , Idem pour les structures, tableaux de « bittable type » …de « bittable type » …

Non Blittable typesNon Blittable types

On utilise l’attribut MarshalAs(UnmanagedType::) sur On utilise l’attribut MarshalAs(UnmanagedType::) sur les paramètres des fonctions importées.les paramètres des fonctions importées.

Page 69: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : PInvokeInterop : PInvoke

PInvoke a un coût :PInvoke a un coût :10 à 30 x86 instructions par appel…10 à 30 x86 instructions par appel…

La performance est également liée à la quantité de La performance est également liée à la quantité de donnée à Marshallerdonnée à Marshaller

Préférer peu d’appel avec plus de données que plus Préférer peu d’appel avec plus de données que plus d’appel avec moins de données d’appel avec moins de données

PInvoke plus performant que COM Interop car COM PInvoke plus performant que COM Interop car COM Interop s’appuie sur PInvoke avec une couche Interop s’appuie sur PInvoke avec une couche supplémentairesupplémentaire

Page 70: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : COM InteropInterop : COM Interop

RCW et CCWRCW et CCW.NET vers COM.NET vers COM

COM vers .NETCOM vers .NET

Page 71: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : CLR HostingInterop : CLR Hosting

Qui host la CLR ?Qui host la CLR ?Le shell Windows Le shell Windows IE 6.0 et des brouzoufsIE 6.0 et des brouzoufs

ASP.NETASP.NET

Biztalk 2004Biztalk 2004

Pour la CLR2.0Pour la CLR2.0SQL Server 2005SQL Server 2005

Page 72: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Interop : CLR HostingInterop : CLR Hosting

Comment héberger la CLR ?Comment héberger la CLR ?Appel natif vers code managé seulementAppel natif vers code managé seulement

Une API clé :Une API clé :ICLRRuntimeHostICLRRuntimeHost

Scénarios très particuliers…Scénarios très particuliers…

Page 73: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

__pin pointer__pin pointer

#pragma#pragma

PInvokePInvoke

COM InteropCOM Interop

Hosting CLRHosting CLR

Page 74: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

PausePause

Reprise dans 15 minutesReprise dans 15 minutes

Page 75: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

VS2005 : C++ / CLIVS2005 : C++ / CLI

Normalisation des Extensions Managées Normalisation des Extensions Managées pour C++pour C++

En cours à l’ECMA et l’ISOEn cours à l’ECMA et l’ISO

Spécification disponible sur les sitesSpécification disponible sur les sites

Page 76: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

VS2005 et C++VS2005 et C++Évolution du compilateurÉvolution du compilateur

Code ClsCompliantCode ClsCompliantRef class et ref valueRef class et ref valueClaire séparation entre new et gcnewClaire séparation entre new et gcnew

Heap et ManagedHeapHeap et ManagedHeap

Code IL produitCode IL produitSafe – Pure - VerifiableSafe – Pure - Verifiable

Nouvelle version de la CLR : 2.0Nouvelle version de la CLR : 2.01500 nouvelles classes1500 nouvelles classesGenerics …Generics …

Inclus eVC++Inclus eVC++Évolution des MFC for CE (multi doc…)Évolution des MFC for CE (multi doc…)

Page 77: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Déclarations basiquesDéclarations basiques

Notion d’ “adjective class”Notion d’ “adjective class”

Types C++ et CLR cohérentTypes C++ et CLR cohérent

ref class A abstract { }; // abstractref class B sealed : A { }; // no further derivation ref class C : B { }; // error, B is sealed

ref class A abstract { }; // abstractref class B sealed : A { }; // no further derivation ref class C : B { }; // error, B is sealed

class N { /*…*/ }; // nativeref class R { /*…*/ }; // CLR reference type

value class V { /*…*/ }; // CLR value typeinterface class I { /*…*/ }; // CLR interface type

enum class E { /*…*/ }; // CLR enumeration type

class N { /*…*/ }; // nativeref class R { /*…*/ }; // CLR reference type

value class V { /*…*/ }; // CLR value typeinterface class I { /*…*/ }; // CLR interface type

enum class E { /*…*/ }; // CLR enumeration type

Page 78: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Pointers et HandlesPointers et Handles

Création d’objet sur la pile le tas et le tas managéCréation d’objet sur la pile le tas et le tas managé

Sur le tas natifSur le tas natif

Comme d’hab pointeurs (*) stablent indépendant du GCComme d’hab pointeurs (*) stablent indépendant du GC

Comme d’hab, attention aux fuites mémoire si pas de deleteComme d’hab, attention aux fuites mémoire si pas de delete

Sur le tas managéSur le tas managé

Handles (^) sont des références d’ objetsHandles (^) sont des références d’ objets

Pas d’opérations arithmétiques dessus (cf. interior_ptr)Pas d’opérations arithmétiques dessus (cf. interior_ptr)

delete devient optionnelledelete devient optionnelle

Sur la pileSur la pile

Permet des destructions déterministesPermet des destructions déterministes

T* t1 = new T;T* t1 = new T;

T^ t2 = gcnew T;T^ t2 = gcnew T;

T t3;T t3;

Page 79: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

PropertiesPropertiesSyntaxeSyntaxe

ref class R { int mySize;public: property int Size { int get() { return mySize; } void set(int val) { mySize = val; } }};

R r;r.Size = 42; // use like a field

ref class R { int mySize;public: property int Size { int get() { return mySize; } void set(int val) { mySize = val; } }};

R r;r.Size = 42; // use like a field

ref class R {public: property int Size; // compiler-generated}; // get, set, and backing store

ref class R {public: property int Size; // compiler-generated}; // get, set, and backing store

Notation simplifiéeNotation simplifiée

Page 80: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Delegates et EventsDelegates et Events

SyntaxeSyntaxe

delegate void D(int);

ref class R {public: event D^ e; // trivial event; // compiler-generated members

void f() { e(42); } // invoke it};

R^ r = gcnew R();r->e += gcnew D(this, &SomeMethod);r->e += gcnew D(SomeFreeFunction);r->f();

delegate void D(int);

ref class R {public: event D^ e; // trivial event; // compiler-generated members

void f() { e(42); } // invoke it};

R^ r = gcnew R();r->e += gcnew D(this, &SomeMethod);r->e += gcnew D(SomeFreeFunction);r->f();

Vous pouvez écrire, ajouter, enlever et déclencher vous même les events.Vous pouvez écrire, ajouter, enlever et déclencher vous même les events.

Page 81: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

GenericsGenericsSyntaxe des Generics ~comme celle des Syntaxe des Generics ~comme celle des templatestemplates

Admettent des contraintes et l’héritageAdmettent des contraintes et l’héritage

Les generics et les templates peuvent se Les generics et les templates peuvent se combiner…combiner…

generic<typename T>where T : IFooref class GR { /* … */ };

generic<typename T>where T : IFooref class GR { /* … */ };

Page 82: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MFC IntégrationMFC Intégration

Hosting WinForms Controls in MFCHosting WinForms Controls in MFC Les contrôles WinForms ne sont pas supportés tel quels:Les contrôles WinForms ne sont pas supportés tel quels:

Hébergé en tant qu’ActiveX Controls via regasmHébergé en tant qu’ActiveX Controls via regasm

Hébergé en tant que HWNDHébergé en tant que HWND

MFC héberge les contrôles WinForms via les interfaces MFC héberge les contrôles WinForms via les interfaces OLEOLE

Hébergé en tant qu’objets .NET Hébergé en tant qu’objets .NET

Accès complet aux WinForms .NET properties, methodes et eventsAccès complet aux WinForms .NET properties, methodes et events

« MFC80 addresses many accelerator related issues »« MFC80 addresses many accelerator related issues »

Page 83: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

MFC Windows Forms MFC Windows Forms IntegrationIntegration

#include <afxWinForms.h>#include <afxWinForms.h>

MFCM80.DLL MFCM80.DLL Implemente “the underlying functionality”Implemente “the underlying functionality”Part des assemblies MFCPart des assemblies MFC

MFCMIFC80.DLLMFCMIFC80.DLLAssembly CLS compliant – MFC interfacesAssembly CLS compliant – MFC interfacesUtilisable par tous les langages .NETUtilisable par tous les langages .NETAjoute l’intégration des MFC aux Windows Forms Ajoute l’intégration des MFC aux Windows Forms ControlsControlsNamespace: Microsoft::VisualC::MFCNamespace: Microsoft::VisualC::MFC

Page 84: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Windows Forms Control as CViewWindows Forms Control as CView

Derivée de CWinFormsViewDerivée de CWinFormsViewclass MyView : public CWinFormsViewclass MyView : public CWinFormsView

Specifier le type de contrôle dans le constructeurSpecifier le type de contrôle dans le constructeurMyView::MyView() : CWinFormsView( MyControl::typeid ) { … }MyView::MyView() : CWinFormsView( MyControl::typeid ) { … }

Recevoir les Update Notification des views dans le Recevoir les Update Notification des views dans le ContrôleContrôle

Utiliser Microsoft::VisualC::MFC::IViewUtiliser Microsoft::VisualC::MFC::IView

Travailler avec les MFC Command RoutingTravailler avec les MFC Command RoutingUtiliser Microsoft::VisualC::MFC::ICommandTargetUtiliser Microsoft::VisualC::MFC::ICommandTarget

Page 85: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

C++/CLI conclusionC++/CLI conclusion

* est à ^ ce que & est à %* est à ^ ce que & est à %

Page 86: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

DémosDémos

C++/CLI classe et syntaxeC++/CLI classe et syntaxe

Destruction pattern Destruction pattern

C# Killer C# Killer GenericsGenerics

__clrcall__clrcall

Page 87: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

Recap - Visual C++ EvolutionRecap - Visual C++ EvolutionVisual C++ 6.0Visual C++ 6.0 ATL3/MFC42 (6.0)ATL3/MFC42 (6.0)

Visual Studio .NETVisual Studio .NET

Visual C++ 7.0Visual C++ 7.0

Unified Visual Studio IDE & DebuggerUnified Visual Studio IDE & Debugger

MFC7/ATL7, attributed programming, ATL ServerMFC7/ATL7, attributed programming, ATL Server

Whole Program OptimizationWhole Program Optimization

C++ Managed ExtensionsC++ Managed Extensions

Fixed STL concurrency and DLL issuesFixed STL concurrency and DLL issues

/GS Runtime Security Check/GS Runtime Security Check

Visual Studio .NET Visual Studio .NET 20032003

Visual C++ 7.1Visual C++ 7.1

ISO Standard C++ Conformance ISO Standard C++ Conformance

/Arch:SSE/SSE2 – floating point code generation/Arch:SSE/SSE2 – floating point code generation

Windows Forms Designer for Managed ExtensionsWindows Forms Designer for Managed Extensions

Visual Studio 2005Visual Studio 2005

Visual C++ 8.0Visual C++ 8.0

C++/CLI LanguageC++/CLI Language

Integrated 64-bit Compiler and ToolsIntegrated 64-bit Compiler and Tools

Profile Guided OptimizationProfile Guided Optimization

Safe Extension for CRTSafe Extension for CRT

Project Property Manager, Source Navigation/BrowsingProject Property Manager, Source Navigation/Browsing

MFC/Windows Forms IntegrationMFC/Windows Forms Integration

Page 88: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

RessourcesRessourcesLe centre de développement C++ Le centre de développement C++ en françaisen français

http://www.microsoft.com/france/http://www.microsoft.com/france/VisualC VisualC

Page 89: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

RessourcesRessourcesC++ Tour FranceC++ Tour France

http://www.microsoft.com/france/VisualC http://www.microsoft.com/france/VisualC

VS 2003 What’s New Info:VS 2003 What’s New Info:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcedit/html/vcoriCCompilerLinkerCLanguage.asp?frame=true vcedit/html/vcoriCCompilerLinkerCLanguage.asp?frame=true

  

VS 2003 Compiler Changes InfoVS 2003 Compiler Changes Infohttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrfStandardComplianceIssuesInVisualC.asp?vclang/html/vclrfStandardComplianceIssuesInVisualC.asp?frame=trueframe=true

http://www.gotdotnet.com/team/vcplusplus/ http://www.gotdotnet.com/team/vcplusplus/

http://msdn.microsoft.com/visualc/ http://msdn.microsoft.com/visualc/ http://msdn.microsoft.com/newsgroups/ http://msdn.microsoft.com/newsgroups/ Dans des newsgroupsDans des newsgroupsmicrosoft.public.dotnet.languages.vc microsoft.public.dotnet.languages.vc microsoft.public.dotnet.languages.vc.libraries microsoft.public.dotnet.languages.vc.libraries

Page 90: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

RessourcesRessources

http://msdn.microsoft.com/visualc/http://msdn.microsoft.com/visualc/Blogs:Blogs:

Brandon Bray http://blogs.msdn.com/branbrayBrandon Bray http://blogs.msdn.com/branbrayHerb Sutter http://blogs.msdn.com/hsutterHerb Sutter http://blogs.msdn.com/hsutterStan Lippman http://weblogs.asp.net/slippmanStan Lippman http://weblogs.asp.net/slippmanJonathan Caves http://joncaves.blogspot.comJonathan Caves http://joncaves.blogspot.comMartyn Lovell Martyn Lovell http://blogs.gotdotnet.com/martynlhttp://blogs.gotdotnet.com/martynl

C++/CLI Draft SpecificationC++/CLI Draft Specificationhttp://msdn.microsoft.com/visualc/http://msdn.microsoft.com/visualc/homepageheadlines/ecma/default.aspxhomepageheadlines/ecma/default.aspx

Page 91: Tour de France C++ 2005  Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique.

QUESTIONSQUESTIONS