La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Tour de France C++ 2005 Eric Mittelette : Eric Vernié : Relation Technique.

Présentations similaires


Présentation au sujet: "Tour de France C++ 2005 Eric Mittelette : Eric Vernié : Relation Technique."— Transcription de la présentation:

1 Tour de France C Eric Mittelette : Eric Vernié : Relation Technique Développeurs

2 HP Partenaire Mondial de Microsoft Intégrateur des technologies Microsoft : Plus de 10M de postes Windows 2000/XP déployés Plus de 13M de postes MS Exchange 2000/2003 déployés Services de support Microsoft Développement conjoint de solutions verticales : HP OpenBank – Banque HP CBI.NET – Industrie HP ISM.NET – Telecom Centre dexpertise et de benchmarks dédiés Microsoft Un portfolio de solutions pour une infrastructure Microsoft étendue Serveurs 32 et 64 bits Stockage NAS, SAN Postes de travail… Windows Mobile Phone Edition Windows XP Edition Tablette PC

3 Agenda Introduction : État de lart du C++ C++ Natif CompilateurBibliothèques C++ et le monde.NET Rappel sur la CLR Extension Managed C++ C++ / CLI

4 Évolution du Visual C Visual C ATL3/MFC42 (6.0) 2002 Visual Studio.NET Visual C Unified Visual Studio IDE & Debugger MFC7/ATL7, attributed programming, ATL Server Whole Program Optimization C++ Managed Extensions Fixed STL concurrency and DLL issues /GS Runtime Security Check 2003 Visual Studio 2003 Visual C ISO Standard C++ Conformance /Arch:SSE/SSE2 – floating point code generation Windows Forms Designer for Managed Extensions 2005 Visual Studio 2005 Visual C C++/CLI Language Integrated 64-bit Compiler and Tools Profile Guided Optimization Safe Extension for CRT Project Property Manager, Source Navigation/Browsing MFC/Windows Forms Integration

5 État de lart du C++ Non le C++ nest pas mort Non le C++ nest pas mort Très proche de la Norme ISO 98 (98%) Évolutions Support du standard ISO 98 PerformanceSécurité Souvrir au monde.NET « First class tool and language » Plusieurs voies pour le future Code Natif (SDKs MFC ATL STL…) Code Managed (Extensions et CLI) DDKs : reste loutil indispensable pour les drivers Embedded : code natif pour CE Longhorn : nouveau jeux APIs dans WinFX …longue vie au C++ ! Jeux et DirectX : performances et framework au rendez vous (XNA)

6 Compilateur C++ et norme ISO Depuis le début Microsoft fait évoluer son compilateur Norme 1998, presque atteinte, aujourdhui: 98% de la norme Support des STL renforcé Points non conforment à la norme

7 Portage de code Breaking changes (impact de la norme ANSI) Spécialisation explicite (plus de redéfinition) Opérateur new lève désormais des Exceptions ( std::nothrow pour revenir comme avant) Chaînes littéral (const char[n]) Surcharge des Template de fonctions changent Koening lookup Initialisation de base à 0 Typename devient obligatoire dans les Template… Friend a changer de comportement sur les classes Pointeurs sur Membres requièrent un & Using, implicit const int ont changé Portée des déclarations de for a changé (Zc) I/O stream changement (#include ) …

8 Résumé des changements à la compilation

9 Démos Impact de la norme ISO 98 Koening lookup Spécialisation partielle des Templates InitialisationFriend Membre et pointeur Scope…

10 C++ Natif : Performances Options de compilation /Gy : Empaquetage des fonctions /G7 : Pentium 4 /arch:SSE[2] : (Utilisation des instructions et registres SSE) WPO /GL et /LTCG au link (Optimisation du code) PGO (Optimisation par instrumentation du code) Floating point Model /fp Intrinsec /Oi OpenMP : pragma pour le code multi processeur

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

12 C++ Natif : Sécurité Options de compilation Sécurité /GS : prévention des débordements de tampon…. /RTC : aide au débogage du code Analyse de code /prefast : identifie les leak, débordement de tampon…. CRT Sécurisée CRT sécurisé : ~ 400 modifications Par exemple : strcpy devient strcpy_s Fonction « non sure » dépréciées par défaut #define _CRT_SECURE_NO_DEPRECATE STL Sécurisée Itérateurs STL détectent les débordements de tampon

13 Linker... Options du Linker ajoutées : /ASSEMBLYDEBUG génère lattribut Debuggable et désactive les optimisations JIT. /ASSEMBLYLINKRESOURCE Créé un lien vers une ressource dans le fichier de sortie /DELAYSIGN Place uniquement la public key dans assembly /KEYFILE Fichier contenant la clé /KEYCONTAINER Container de la clé /SAFESEH Avec /SAFESEH le linker produit uniquement une image si on peut générer une table des safe exception handlers. Cette table spécifie quels handlers seront utilisés pour limage.

14 Compilateur, Linker... #Import De nouvelles options pour #import : auto_search Si la librairie importée contient des #import (importation en cascade). auto_rename Quand le mot clé de la librairie est un mot clé réservé du C++, __ est ajouté devant le nom. no_search_namespace, rename_search_namespace, tlbid Gestion plus fine des imports et nom de namespaces.

15 Démos Options de compilation Sécurité Buffer Overrun Analyse statique de code str_safe RTC check PerformancesWPOPGO

16 Pause Retour dans 20 minutes Les speakers sont dans lescalier !

17 Bibliothèques Microsoft propose depuis ~20 ans des librairies: Les MFC évoluent et se maintiennent comme classe librairies générant du code natif version non managée uniquement ATL, continue son évolution vers STL Apparaît comme Serveur WEB avec ATL Server

18 MFC MFC 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 classes C++Encapsuler les API Windows dans des classes C++ Propose une architecture Vue/ContrôleurPropose une architecture Vue/Contrôleur Document <> (n) Vues

19 MFC Changements MFC 7 et 7.1: Connection maps ne sont plus compactées lors de la suppression dun connection point. Ainsi le connection point supprimé est placé à NULL. On doit donc tester NULL quand on utilise : CConnectionPoint::GetConnectionsConnectionPoint::GetNextConnection. Les fonctions suivantes lèvent maintenant des exceptions: CSimpleString::FreeExtraCSimpleString::GetAt CSimpleString::operator [] CSimpleString::ReleaseBufferCSimpleString::ReleaseBufferSetLengthCStrBuf::SetLength CTime::CTime constructors.

20 MFC CAsyncSocket supporte IPv6-via les membres: GetPeerNameEx, GetSockNameEx, ReceiveFromEx, et SendToEx. GetPeerNameEx, GetSockNameEx, ReceiveFromEx, et SendToEx. La classe CImage check le nombres dobjets créés. Quand le décompte vaut 0, La fonction GdiplusShutdown est automatiquement appelée pour libérer les ressources GDI+ (« pil poil » pour les objets créés dans une DLL :-) La classe CString a été réécrite sous forme de Template: CStringT On peut donc lutiliser dans des projets ATL sans un lien trop lourd aux MFC.

21 MFC / ATL : Partage de classes

22 Futur des MFC Reste « The » bibliothèque native C++ de la plate forme Windows Continue dévoluer en MFC 8.0 (détails à venir) Travail doptimisation sur lintégration MFC/NET Intégration des contrôles WindowsForm dans les dialogues MFC Intégrer aux mécanismes DDX, DDX_ManagedControl Intégration des WindowsForm dans les CViews Un namespace : Microsoft::VisualC::MFC

23 Futur des MFC Win32/MFC Windows hosting Avalon XAML as Dialog, Wizards, Task Panes, etc. XAML as MFC Views Visuals for Rendering Animations and Multimedia Avalon Hosting Win32/MFC Windows XAML as top level window Win32/MFC Windows as Avalon control Avalon Hosting ActiveX Controls

24 Futur MFC et XAML MFC hosting XAML Page in CControlBar as Task Pane CMDIChild hosting XAML Page as Child Window XAML Page hosting MFC CView as Element

25 ATL Version 7.1/8 dans Visual Studio 2003/2005 A lorigine pour créer des objets ActiveX Faciliter la création dobjet COM par des Templates de code C++

26 ATL Souvre au WEB ATL Web Service Souvre aux librairies graphiques ATL Windowing et WTL Exploite la programmation par attributs Existe depuis lorigine de lIDL (coclass) Ajout de nouveaux attributs : event_source, event_receiver pour les connection points [ soap_method ] Pour les services Web … Un premier pas vers AOP Traitement des Attributs ~ Code produit par Tisseurs … A suivre !

27 ATL Nouveautés des versions 7 et 7.1 Sécurité ATL7 propose des wrappers pour les win32API de sécurité. Fichiers CAtlFile CAtlTemporaryFile CAtlFileMappingBase/CAtlFileMapping ThreadingCWorkerThread: De nouvelles collections CAtlArray/CAtlList, CAtlArray/CAtlList, CRBTree/CRBMap /CRBMultiMap CString CStringT version Template

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

29 STL STL = Ensemble de headers définit par la norme 50 headers requis (+2 optionnels) + 18 headers du C standard

30 STL Mise à jour de limplémentation de la STL: hash_map Class hash_set Class Optional exception handling support. Amélioration code formatting (readability). Amélioration du support des DLL (passage dobjet entre process). Amélioration du support multithreading. Amélioration de la conformité aux standards. Using namespace std; Iostream.h dépréciée

31 STL Migration depuis VC Problèmes potentiels: Changements des reverse_iterator Changement des MIN/MAX #define Certains Itérateurs ne sont plus des pointeurs…

32 Futur des STL Version 8.0 (VS2005) Détails des classes ajoutées et modifiées dans les mois qui viennent (post Beta2) Apparition des CLI-STL Permettra a vos codes actuels basés sur STL dêtre full managed Challenge de performance vs Collections actuelles du Framework A suivre plus tard (Post RTM ?)

33 API Win32 : DPAPI Data Protection API Renforcée sur 2003, lancé depuis 2000 Encapsulation C# dispo sur MSDN us/secmod/html/secmod21.asp us/secmod/html/secmod21.asp

34 WTL… Windows Template Library Né de lATL Windowing Une forme plus légère que les MFC Hybride ATL/MFC/WTL possible Pas darchitecture Doc/Vue (mais exemple sur le Web) Pas de support « officiel » de Microsoft 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 NOT EDIT" with no problems. You need to know Win32 API programming, and know it well – M Dunn (Code Project) Lien pour le download : version d9a1f288&languageid=f49e a67-3cffcb0c2524&displaylang=en 7727d9a1f288&languageid=f49e a67-3cffcb0c2524&displaylang=en Lien pour le Wizard 7.1 Pour en savoir plus :

35 Démos BibliothèquesMFCSTLWTL ATL Service Web qui connaît les services Web ? Un petit rappel ?

36 Services Web : Définition Définition : « Unité logique applicative » accessible via les protocoles standard dInternet Basé sur les standards du W3C : XML,SOAP, WSDL … Indépendant des OS et implémentations Une véritable interopérabilité des systèmes hétérogènes

37 Concepts des Services Web ClientServeur Quel service me proposes-tu et quel est le format dappel? Contrat SOAP Contrat SOAP Voici mon contrat (WSDL) XML SOAP/XML Jai compris comment invoquer ton service et je tenvoie un document XML représentant ma requête SOAP/XML Jai exécuté ta requête et je te retourne le résultat

38 C++ et le monde.NET.NET sur tous nos Systèmes.NET expose une énorme Bibliothèque de classes Plus de 8000 classes extensibles VS2003 cible le Fx 1.1 VS2005 cible le Fx 2.0 (en 32 et 64 bits)

39 Rappel sur la CLR CLR : Virtual Execution System (VES) Exécute du code managé Fournis une couche entre code Managé et les API natives de lOS Responsable du chargement et de lexécution des programmes… Fournis un ensemble de services … Garbage Collector Sécurité Compilation à la volée …

40 Cest quoi.NET par rapport à la CLR ?.NET est la combinaison : Runtime : CLR (Common Langage Runtime) Librairies : Framework Class Library Permet de connecter des applications via les services Web XML

41 The big picture Application.NET Memory DLL Managed Code : Assembly CLR Unmanaged Code Win32COM COM+ 1.0 Services JIT Compilation Sécurité Base Classes Process WIN32 Application.NET Managed Memory Managed Memory Managed Exécution Managed Exécution Notion d Assembly Notion d Assembly Managed Memory GC Heap

42 Chargement de la CLR Espace dadressage Process WIN32 En-tête PE Section.text Section.idata En-tête CLR IL Métadonnée DLL : MSCorEE.dll Fonction: _CorExemain JMP _CorExeMain Le thread principal du processus démarre EXE.NET MSCorEE.dll _CorExemain Void Main (string args[])

43 CLR : Vue densemble Class Loader IL to Native Compilers Code Manager Garbage Collector Security EngineDebug Engine Type CheckerException Manager Thread SupportCOM Marshaler Base Class Library Support

44 .NET Framework System Globalization Diagnostics Configuration Collections Resources Reflection Net IO Threading Text ServiceProcess SecurityRuntime InteropServices Remoting Serialization System.Data Design ADO SQLTypes SQL System.Xml XPath XSLT Serialization System.WinForms DesignComponentModel System.Drawing Imaging Drawing2D Text Printing System.Web ConfigurationSessionState CachingSecurity Services Description Discovery Protocols UI HtmlControls WebControls

45 JIT Compilation Espace dadressage Console Code IL Static void WriteLine(string) Allocation mémoire Instructions natives du processus MOV AX, BX … Compilation du code IL

46 Espace dadressage Console Code Natif Static void WriteLine(string) MOV AX, BX …

47 Compiler AssemblyDEVELOPMENTMC++C#J#VBCobol… MSILMetadataResources 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 code Application Directory Global Assembly Cache (GAC) Déploiement AssemblyDEVELOPMENTDEPLOYMENT SetupCopyBrowser Download Cache Install

48 Debug Engine IL to Native Compiler Application Directory SetupCopyBrowser Download Cache Global Assembly Cache (GAC) Assembly on Target Machine Exécution AssemblyDEVELOPMENTDEPLOYMENT Install EXECUTION AssemblyLoader Security Class Loader Native.exe + GC table Code Manager Garbage Collection Exception Manager Thread Support COM Interop Policy

49 Démos Code MSIL Rotor et le fonctionnement du VES Disponible sur le site MSDN

50 VS2003: Extension Managed C++ Extension managée pour le C++ /CLR : émettre de lIL plutôt que du binaire 15 nouveaux mot clés Va nous permettre de réutiliser du code CPP existant… Unique sur la plate forme.NET !

51 Extension Managed C++ __abstract Déclaration d'une classe abstraite, qui ne saurait être instanciée directement __box "Boxing" automatique, comme en C# et VB.NET, c'est- à-dire création d'une copie sur le tas (heap) d'une classe __value (cf. ci-dessous). __delegate Définition d'un type délégué (une sorte de pointeur de méthode) __event Même nuance qu'en VB.NET et C# : un événement est une sorte de __delegate sur lequel les instances d'autres classes n'ont qu'un pouvoir d'abonnement / désabonnement. Ils ne peuvent en aucun cas être la source de cet événement, ni en écraser la liste des abonnés. __finally Comble une lacune de C++, qui ne dispose pas de bloc "finally" __gc C'est le mot clé tant attendu : les instances de classes __gc sont libérées automatiquement de la mémoire par le Garbage Collector __identifier Technique obscure qui permet d'employer un mot réservé du C++ comme identificateur (de méthode, de variable...)

52 Extension Managed C++ __interface C++ permet de déclarer des classes, qui ne contiennent éventuellement que des méthodes virtuelles pures. Ce mot clé va un peu plus loin et ajoute la compréhension des interfaces au C++. __nogc Déclaration d'une classe C++ native, dont les instances ne seront pas libérées automatiquement par le Garbage Collector. Notez que ce choix est celui par défaut : __pin Le "Pinning" est une astuce qui permet d'empêcher le Garbage Collector de libérer un objet __gc __property Définit une propriété sur une classe __gc (qui peut être, comme d'habitude, en lecture seule ou en lecture-écriture) __sealed Interdit de sous classer une classe __gc ou de redéfinir une méthode d'une classe __gc. Les développeurs Java comprendront "static". __try_cast Tentative de cast. Si elle échoue, cette expression lance une exception. __typeof Renvoie le type (System::Type) d'un objet donné. C'est un peu ce que l'on appelait RTTI (RunTime Type Information) en C++ standard, à ceci près que la Réflexion.NET est beaucoup plus riche.

53 Classes managées Classes et Interfaces __gc __nogc (par défaut) __interface Remplace les classes virtuelles abstraites pures Gestion des Propriétés __property get_XXX et set_XXX

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

55 Démos B.A.BA du Managed C++ Point-cercle Utilisation des classes du Framework.NET

56 Rappel CLR Gestion de la mémoire.Net Garbage Collector Managed Heap : Heap privé géré par la CLR Basé sur des générations Les objets survivants a une collecte sont promus dans la génération suivante (gen0, gen1 et gen2) Un Heap pour les « large object » (> octets) Destruction vs Finalizer et Dispose pattern

57 CLR et C++ Destruction des objets : Rien dans la classe Impossible de libérer les ressources OS (fichier…) ! La mémoire elle, sera libérée… ~MaClasse Pas un vrai destructeur (MC++) : pas de libération mémoire Appelé si : delete p; Appelé a la fin du process ! Créé en fait un Finalizer… (évolution CLI/C )

58 CLR et C++ Destruction des objets Finalizer Crée automatiquement si un destructeur existe Mis dans une queue : FinalizeQueue (Résurrection possible) Impact sur les performances…si beaucoup dobjets… Invoqué par un appel à : delete p; Collection du GC Unload dun appdomain Implémenter IDispose p.Dispose(); Évite/Complément à la mécanique des Finalizer

59 MC++ et pointeurs Pointeurs managés Déclarer avec __gc Pas darithmétique de pointeurs

60 Démos Destructions des objets.NET SOS

61 Interopérabilité Managed/Unmanaged It Just Work (IJW) Réutilise votre code sans modification Mixte au niveau du source: pin pointer #pragma unmanaged Classes de service GC,MarshalPInvoke Appel des API de la plateforme ou de vos librairies COM Interop Bâtit sur PInvoke Hosting de la CLR La CLR vu comme un objet COM.. Utilisation dans des scénarii particuliers

62 Interop : It Just Work (IJW) Permet une migration rapide des codes unmanaged vers du managed Va générer les fonctions de wrapping automatiquement Ré utilisation des codes « as is » /CLR étant établis, possibilité dajout de fonctionnalités managées

63 Interop : It Just Work (IJW) Performance ? Un cas intéressant le portage de Quake II par vertigo software Portage en Managed (it just work) Ajout de code Managed (Radar)

64 Démos IJW et du code MFC IJW et Quake II

65 Interop : __pin Pointer Pointeurs __pin : ManagedClass __pin* ppMC = new ManagedClass(); Permet de garantir que le pointeur reste valable même si le garbage collector est actif Fige la zone mémoire : impact sur la fragmentation mémoire et les performances… Unpin explicit : Par simple remise à zéro du pinPointeur ppMC = 0; Implicit également, en sortant du bloc de code Y compris en cas derreur

66 Interop : __pin Pointer Permet des passages Managed/UnManaged Data membre ou instance dobjet Managed passé à du code unmanaged

67 Interop : Pragma #pragma unmanaged #pragma managed Permet davoir simultanément du MSIL et du binaire dans la même assembly Réutilisation du code C ++ existant par simple copier/coller Permet la création de « bridge et wrapper » entre monde managed et unmanaged

68 InteropServices::Marshal class Ensemble de méthodes statiques, utilisées pour le marshalling « custom » et complexe. Utilisées dans linteropérabilité COM Cas des structures contenant des pointeurs, Cas des pointeurs de fonctions… Équivalence des chaînes de caractères : wtypes.hC++MC++ CHARcharChar LPSTRchar* String* [in] LPCSTR const char* String* LPWSTRwchar_t* String* [in] StringBuilder* [in,out] LPCWSTR const wchar_t* String*

69 Interop : PInvoke PInvoke: Les dlls Windows déclarent des fonctions « exportées » __declspec ou dans le fichier.def Le linker détecte ces informations et génère une table dans la lib correspondante (avec les symboles et adresses relatives). On peut appeler les dll de 2 manières (au chargement ou dynamiquement). Dynamiquement on passe par LoadLibrary() et GetProcAdress() qui retourne un pointeur de fonction. PInvoke fait ce travail de LoadLibrary(), GetProcAdress en utilisant le mécanisme de « delay loading » On attend un appel explicite à la fonction pour charger la dll en mémoire.

70 Interop : PInvoke System::Runtime::InteropServices::DllImport permet de marquer une fonction comme existant dans le namespace courant mais possédant son implémentation dans une dll externe. Dllimport Voir EntryPoint pour renommer les fonctions importées

71 Interop : PInvoke On peut recevoir des call back via PInvoke On travail avec des delegates Gestion des structures : Blittable types : même représentation mémoire dans les 2 mondes Marshalling automatique, Idem pour les structures, tableaux de « bittable type » … Non Blittable types On utilise lattribut MarshalAs(UnmanagedType::) sur les paramètres des fonctions importées.

72 Interop : PInvoke PInvoke a un coût : 10 à 30 x86 instructions par appel… La performance est également liée à la quantité de donnée à Marshaller Préférer peu dappel avec plus de données que plus dappel avec moins de données PInvoke plus performant que COM Interop car COM Interop sappuie sur PInvoke avec une couche supplémentaire

73 Interop : COM Interop RCW et CCW.NET vers COM COM vers.NET

74 Interop : CLR Hosting Qui host la CLR ? Le shell Windows Le shell Windows IE 6.0 et des brouzoufs ASP.NET Biztalk 2004 Pour la CLR2.0 SQL Server 2005

75 Interop : CLR Hosting Comment héberger la CLR ? Appel natif vers code managé seulement Une API clé : ICLRRuntimeHost Scénarios très particuliers…

76 Démos __pin pointer #pragmaPInvoke COM Interop Hosting CLR

77 Pause Reprise dans 15 minutes

78 VS2005 : C++ / CLI Normalisation des Extensions Managées pour C++ En cours à lECMA et lISO Spécification disponible sur les sites

79 VS2005 et C++ Évolution du compilateur Code ClsCompliant Ref class et ref value Claire séparation entre new et gcnew Heap et ManagedHeap Code IL produit Safe – Pure - Verifiable Nouvelle version de la CLR : nouvelles classes Generics … Inclus eVC++ Évolution des MFC for CE (multi doc…)

80 Déclarations basiques Notion d adjective class Types C++ et CLR cohérent ref class A abstract { };// abstract ref class B sealed : A { };// no further derivation ref class C : B { };// error, B is sealed class N { /*…*/ };// native ref class R { /*…*/ };// CLR reference type value class V { /*…*/ };// CLR value type interface class I { /*…*/ };// CLR interface type enum class E { /*…*/ };// CLR enumeration type

81 Pointers et Handles Création dobjet sur la pile le tas et le tas managé Sur le tas natif Comme dhab pointeurs (*) stablent indépendant du GC Comme dhab, attention aux fuites mémoire si pas de delete Sur le tas managé Handles (^) sont des références d objets Pas dopérations arithmétiques dessus (cf. interior_ptr) delete devient optionnelle Sur la pile Permet des destructions déterministes T* t1 = new T; T^ t2 = gcnew T; T t3;

82 Properties Syntaxe 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 Notation simplifiée

83 Delegates et Events Syntaxe 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.

84 Generics Syntaxe des Generics ~comme celle des templates Admettent des contraintes et lhéritage Les generics et les templates peuvent se combiner… generic where T : IFoo ref class GR { /* … */ };

85 MFC Intégration Hosting WinForms Controls in MFC Les contrôles WinForms ne sont pas supportés tel quels: Hébergé en tant quActiveX Controls via regasm Hébergé en tant que HWND MFC héberge les contrôles WinForms via les interfaces OLE Hébergé en tant quobjets.NET Accès complet aux WinForms.NET properties, methodes et events « MFC80 addresses many accelerator related issues »

86 MFC Windows Forms Integration #include #include MFCM80.DLL Implemente the underlying functionality Part des assemblies MFC MFCMIFC80.DLL Assembly CLS compliant – MFC interfaces Utilisable par tous les langages.NET Ajoute lintégration des MFC aux Windows Forms Controls Namespace: Microsoft::VisualC::MFC

87 Creating WinForms Controls CWinFormsControl<> template CreateManagedControl() Overloads CreateManagedControl( System::Type^, … ); CreateManagedControl( typename TManagedControl^, … ); CreateManagedControl ( DWORD style, CRect rect, CWnd* parent, int nID ); CreateManagedControl( DWORD style, CWnd* parent, int nID ); Replaces existing control – for dialog resource layout DDX_ManagedControl( pDX, nID, CWinFormsControl<> ) Binds variable to dialog box item Replaces STATIC control with Windows Forms control Access Managed Type via: GetControl()operator->() operator TManagedType^()

88 Windows Forms Control as CView Derivée de CWinFormsView class MyView : public CWinFormsView Specifier le type de contrôle dans le constructeur MyView::MyView() : CWinFormsView( MyControl::typeid ) { … } Recevoir les Update Notification des views dans le Contrôle Utiliser Microsoft::VisualC::MFC::IView Travailler avec les MFC Command Routing Utiliser Microsoft::VisualC::MFC::ICommandTarget

89 C++/CLI conclusion * est à ^ ce que & est à %

90 Démos C++/CLI classe et syntaxe Destruction pattern C# Killer C# Killer Generics__clrcall

91 Recap - Visual C++ Evolution Visual C ATL3/MFC42 (6.0) Visual Studio.NET Visual C Unified Visual Studio IDE & Debugger MFC7/ATL7, attributed programming, ATL Server Whole Program Optimization C++ Managed Extensions Fixed STL concurrency and DLL issues /GS Runtime Security Check Visual Studio.NET 2003 Visual C ISO Standard C++ Conformance /Arch:SSE/SSE2 – floating point code generation Windows Forms Designer for Managed Extensions Visual Studio 2005 Visual C C++/CLI Language Integrated 64-bit Compiler and Tools Profile Guided Optimization Safe Extension for CRT Project Property Manager, Source Navigation/Browsing MFC/Windows Forms Integration

92 Ressources Le centre de développement C++ en français alC alC

93 Ressources C++ Tour France VS 2003 Whats New Info: us/vcedit/html/vcoriCCompilerLinkerCLanguage.asp?frame=true us/vcedit/html/vcoriCCompilerLinkerCLanguage.asp?frame=true VS 2003 Compiler Changes Info us/vclang/html/vclrfStandardComplianceIssuesInVisualC.asp?frame =true us/vclang/html/vclrfStandardComplianceIssuesInVisualC.asp?frame =true Dans des newsgroups microsoft.public.dotnet.languages.vc microsoft.public.dotnet.languages.vc.libraries

94 Ressources Blogs: Brandon Bray Herb Sutter Stan Lippman Jonathan Caves Martyn Lovell C++/CLI Draft Specification eadlines/ecma/default.aspx eadlines/ecma/default.aspx

95 QUESTIONS


Télécharger ppt "Tour de France C++ 2005 Eric Mittelette : Eric Vernié : Relation Technique."

Présentations similaires


Annonces Google