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

Eric Mittelette – Microsoft France Eric Vernié – Microsoft France

Présentations similaires


Présentation au sujet: "Eric Mittelette – Microsoft France Eric Vernié – Microsoft France"— Transcription de la présentation:

1 Eric Mittelette – Microsoft France ericmitt@microsoft.com Eric Vernié – Microsoft France ericv@microsoft.com

2 Introduction : Pourquoi le C++/CLI ? C++/CLI : Eléments Syntaxiques C++/CLI : Garbage collection et destruction déterministe ? C++/CLI : Code hybride ou comment mixer les codes natifs et managés Conclusion : C++/CLI « first class langage for.NET » Bonus : restez jusquà la fin

3 Une brève histoire du C++ On arrive du B en passant par le C On arrive a du C avec classe (79) C++ avec Héritage et virtuel (88) Template « Generic Programming » (91) ANSI-C++ et ISO-C++ (96-98) « Dynamic Component Programming » C++/CLI (2005)

4 1998 Visual C++ 6.0 ATL3/MFC42 (6.0) 2002 Visual Studio.NET Visual C++ 7.0 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++ 7.1 ISO Standard C++ Conformance /Arch:SSE/SSE2 – floating point code generation Windows Forms Designer for Managed Extensions 2005 Visual Studio 2005 Visual C++ 8.0 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 Ré utiliser les compétences « fines/pointues » des développeurs C++ On ne va pas ré écrire des millions de lignes de code pour une nouvelle plateforme :.NET « We love your C++ Code » Syntaxe déposée à lECMA et ISO Travail initié en 2002 avec les MC++ (Managed Extension for C++) Intégration de C++/CLI avec ISO-C++ « LE » language de linteropérabilité Utiliser le Framework.NET de façon naturelle en C++

6 Une option de compilation « primordiale » /CLR : émettre du code MSIL Support de la syntaxe CLI « activée » Option pour le projet ou pour un fichier individuellement Différentes sous option à /CLR /CLR : Pure /CLR : Safe

7 Notion d adjective class Types C++ et CLR cohérents Attention : pas d héritage multiple de « ref class » Attention : implémentation multiple d « interface class » 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

8 Pointers et Handles Sur le tas natif Comme dhab pointeurs (*) stables indépendant du GC Comme dhab, attention aux fuites mémoire si pas de delete 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 optionnel Sur la pile (vraiment ?) Permet des destructions déterministes TNatif* t1 = new TNatif; TNet^ t2 = gcnew TNet; T t3;

9 * est à ^ ce que & est à %

10 Propriété 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

11 Delegate et Event 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.

12 Generic Syntaxe des Generics ~comme celle des templates Admettent des contraintes et lhéritage Instancié à lexécution Template Disponible pour le C++/CLI Généré au moment de la compilation Les generics et les templates peuvent se combiner… Attention casse tête chinois et rigueur demandée ! Attention casse tête chinois et rigueur demandée ! generic where T : IFoo ref class GR { /* … */ };

13 CLR arrays CLR arrays Notation [] non supportée en C++/CLI Notation [] non supportée en C++/CLI array ^ a1 = gcnew array (10); array ^ a2 = gcnew array { 1, 2, 3 }; array ^ a3 = { 1, 2, 3 }; array ^ a4 = gcnew array (10) { 1, 2 }; F(gcnew array { button1, button2 }); array a5 = gcnew array (10, 20); array a6 = { { 1, 2, 3 }, { 4, 5, 6 } };

14 Chaque objet.Net est sous contrôle du « Garbage Collector » La mécanique du « garbage collector » est un pré requis essentiel à tous développeurs C++/CLI Génération, Collection, Compactage, Pattern IDispose et Finalisation Heap Managed > 3 private heap + 1 private heap pour les « Large Object » Elément syntaxique ~MaClasse et !MaClasse

15 Une classe qui implémente un Finalizer doit avoir un destructeur Une classe qui implémente un Finalizer doit avoir un destructeur Evitons la duplication de code : appelons le finalizer dans le destructeur Evitons la duplication de code : appelons le finalizer dans le destructeur ref class R { /* MORE CODE */ !R() { /* Clean-up value type resources */ } ~R() { /* Do early clean-up, clean-up ref classes */ this->!R(); } };

16

17 C++/CLI : le roi de linteropérabilité COM Interop PInvoke Pour tous les languages.NET C++ Interop It Just Work ! Tous les scénarii possible…et imaginable Hosting de la CLR Contrôle fin de lexécution du code.NET Par exemple dans votre code MFC…

18 Ré utiliser votre existant Migration code VC6 Breaking changes (conformité à la norme ISO98) Un seul environnement de développement (VS2005) Compilateur 64 bits, Optimisation du code (WPO PGO), support de lOpenMP …. Et bien plus encore Utilisation des.lib ou dll depuis VS2005 Et inversement ! Gestion du code mixte Passer des données, des pointeurs de fonctions, faire des appels « croisés » entre le monde managé et le monde natif

19 Scénarii de code hybride Apps VC6 utilisent vos.lib VS2005 Apps VS2005 utilise vos.lib VC6 Code Hybride (mixed code) Utiliser une classe native dans du code CLI Utiliser une classe CLI dans du code natif Utiliser de lassembleur dans du code CLI Utiliser la BCL dans du code natif Utiliser les « Windows Forms » dans les MFC.NETmodule et.Obj + cl.exe ! Hosting de la CLR.

20 La boite à outils du développeur hybride vcclr.h : gcroot<>, auto_gcroot<> AfxWindowsForms.h ( MAKE_DELEGATE … /CLR et ses déclinaisons System::Runtime::Interopservices pin_ptr<>, interior_ptr<> tblimp, tlbexp dllimport attributes Les APIs de hosting #pragma unmanaged TBC…

21 Productivité du développeur accru par la BCL Confort du développeur via lIDE VS2005 Performance au rendez vous-même dans le code managé pur et le code mixte C# killer Ecrire moins de code en C++/CLI quen C#!

22 Preview ORCAS STL / CLR


Télécharger ppt "Eric Mittelette – Microsoft France Eric Vernié – Microsoft France"

Présentations similaires


Annonces Google