L’Accélérateur Windows
                Ressources
                Coaching
                Visibilité

                        aka.ms/accelerateur-windows

                         Plus d’info ? RDV stand Windows 8
Accélérateur Windows
Développer un composant
                       WinRT
                           Eric Vernié
                       Arnaud Auroux




Code / Développement
Investissements Windows 8

• Nouveau Runtime (WinRT)

• Nouvelle expérience utilisateur

• Nouvel environnement d’exécution

• Windows Store
La plateforme Windows 8
                              Windows Store Apps                        Desktop Apps
  View




                              XAML                      HTML / CSS
Controller




                                                        JavaScript
 Model




                      C/C++           C#, VB                          HTML         C      C#
                                                         (Chakra)     JavaScrip   C++     VB
                                                                          t
                              Windows Runtime APIs
  System Services




                    Communication      Graphics &         Devices &
                       & Data            Media             Printing

                                    Application Model                 Internet            .NET
                                                                      Explorer
                                                                                  Win32    SL
   Kernel




                                       Windows Kernel Services
WinRT APIs
Environnement d’exécution
      Votre application




                                                         Core OS
      Process.exe




App Container + Signed & Validated code   AppXManifest
Pourquoi développer un Composant
WinRT ?
 • Performance

 • Réutilisabilité

 • Extensibilité
Réutilisation de code

PROTOCOLE OSC
Windows Runtime (WinRT)
Développer un composant WinRT
                                   JavaScript

• Disponible pour tous les
  langages
                                   Windows
• Impose un ensemble de            Runtime

  règles.                    C++                C#/VB




                                                        10
Quel langage choisir pour mon application Windows 8
?

• Le langage que vous connaissez
• Le langage dans lequel est écrit votre composant
• Le langage ayant accès aux fonctionnalités dont
  vous avez besoin
• Le langage fournissant les performances voulues
• Le langage de votre choix
Composants WinRT
• Un composant peut être écrit en C#, VB.NET ou
  C++.

• Il peut être consommé par une application écrite en
  C#, VB.NET, C++, Javascript.

• Attention !!
CODE HYBRIDE JAVASCRIPT ET
C++
Architecture du Windows Runtime
                 Windows Store app                            Support des
                                                                langages
                                                            (CLR, WinJS, CRT)
               Projection des Langages

                   UI       Pickers      Controls   Media
                                                            Web Host (HTML,
                                                            CSS, JavaScript))
   Windows        XAML      Storage      Network     …
  Metadata &
  Namespace
                          Windows Runtime Core               Runtime Broker


                              Windows Core
Windows Metadata
• Description complète des APIs de WinRT (methodes,
  interfaces, types, espace de noms, etc.)

• Généré depuis le compilateur C#/VB ou C++

• Intellisense complète

• Définit pour chaque langage comment créer un objet
  depuis WinRT
ILSPY
Architecture Windows Runtime
                      Windows Store app                             Support des
                                                                  langages (CLR,
                                                                    WinJS, CRT)
                    Projection des langages

                        UI       Pickers      Controls   Media
                                                                 Hôte Web (HTML,
                                                                  CSS, JavaScript))
 Windows Metadata      XAML      Storage      Network     …
   & Namespace

                              Windows Runtime Core                Runtime Broker


                                   Windows Core
Projection du Langage
PROJECTION
Impose un ensemble de règles.
• Classes Scellées
    – Classes Privées
•   Types Compatibles
•   Structure champs publiques
•   Pas de type générique personnalisé
•   Remontée des exceptions
•   Asynchronisme
•   …
Les classes doivent être scellées
public sealed class SampleClass
{
    public int Add(int x, int y)
    {
       return x + y;
    }
}
Composant WinRT - C++/CX
public ref class SampleRefClass sealed
{
public:
    double LogCalc(double input)
    {
        // Utilisation de la librairie standard C++.
        return std::log(input);
    }
};
Impose un ensemble de règles.
Cohérence des types

Type WinRT   C++                JavaScript     C#/VB (.NET)

HSTRING      Platform::String   var (string)   String
GUID         GUID               var (string)   GUID
UInt32       uint32             var (double)   uint32
DateTime     (FILETIME)         var (date)     DateTimeOffset
Composant WinRT - Exception
• ABI -> Windows Runtime Exception

• Exception non standard + ABI ->FailureException

• Exception personnalisé
  – Exception standard (COMException ou dérivé) + HRESULT
  – C++ : Platform::Exception::CreateException()
Composant WinRT - Exception
• Composant managé
  – Pas de HRESULT

  – Evènement .NET standard

  – Mécanisme d’accès au dernier message d’erreur
    enregistré
EXCEPTION
Composant WinRT et Asynchronisme
• 4 interfaces
   – IAsyncAction
   – IAsyncActionWithProgress<TProgress>
   – IAsyncOperation<TResult>
   – IAsyncActionWithProgress<TResult,TProgress>

• Ce sont les seuls types qui peuvent traverser la frontière (ABI)

• Attention à la synchronisation de thread !!
ASYNCHRONISME
QUESTIONS
Ressources
• Créer un composant WinRT en C++
  – http://aka.ms/bjsqcj
• Windows Runtime Library
  – http://aka.ms/rk503m
• Pour aller plusde développement WRL
   Modèle loin :
  – http://aka.ms/ug45as
Donnez votre avis !
                   Depuis votre smartphone, sur :
                    http://notes.mstechdays.fr

    De nombreux lots à gagner toutes les heures !!!
               Claviers, souris et jeux Microsoft…

        Merci de nous aider à améliorer les TechDays

http://notes.mstechdays.fr
Backup
The Windows Runtime will automatically
move your calls back to the right thread if
proxies and stubs are available
Aller plus loin avec la WRL
•   Porting COM components to Metro
•   No exceptions requirement
•   Interop with Com
•   No C++ extensions requirement
•   Fine grained control
API Restrictions: What to expect?
              UI: MFC, GDI          X
               UI: DirectX          V   still need to rethink user experience


                ISO C++             V
       VC++ Runtime (CRT, PPL, …)   V

                C++/CLI             X
               OS / Win32           V   WinRT + Win32 subset
               COM / ATL            V   ATL subset
            3rd party libraries     ?   it depends
             Everything else        ?   it depends

Le développement d&rsquo;un Composant WinRT

  • 1.
    L’Accélérateur Windows Ressources Coaching Visibilité aka.ms/accelerateur-windows Plus d’info ? RDV stand Windows 8 Accélérateur Windows
  • 2.
    Développer un composant WinRT Eric Vernié Arnaud Auroux Code / Développement
  • 3.
    Investissements Windows 8 •Nouveau Runtime (WinRT) • Nouvelle expérience utilisateur • Nouvel environnement d’exécution • Windows Store
  • 4.
    La plateforme Windows8 Windows Store Apps Desktop Apps View XAML HTML / CSS Controller JavaScript Model C/C++ C#, VB HTML C C# (Chakra) JavaScrip C++ VB t Windows Runtime APIs System Services Communication Graphics & Devices & & Data Media Printing Application Model Internet .NET Explorer Win32 SL Kernel Windows Kernel Services
  • 5.
  • 6.
    Environnement d’exécution Votre application Core OS Process.exe App Container + Signed & Validated code AppXManifest
  • 7.
    Pourquoi développer unComposant WinRT ? • Performance • Réutilisabilité • Extensibilité
  • 8.
  • 9.
  • 10.
    Développer un composantWinRT JavaScript • Disponible pour tous les langages Windows • Impose un ensemble de Runtime règles. C++ C#/VB 10
  • 11.
    Quel langage choisirpour mon application Windows 8 ? • Le langage que vous connaissez • Le langage dans lequel est écrit votre composant • Le langage ayant accès aux fonctionnalités dont vous avez besoin • Le langage fournissant les performances voulues • Le langage de votre choix
  • 12.
    Composants WinRT • Uncomposant peut être écrit en C#, VB.NET ou C++. • Il peut être consommé par une application écrite en C#, VB.NET, C++, Javascript. • Attention !!
  • 13.
  • 14.
    Architecture du WindowsRuntime Windows Store app Support des langages (CLR, WinJS, CRT) Projection des Langages UI Pickers Controls Media Web Host (HTML, CSS, JavaScript)) Windows XAML Storage Network … Metadata & Namespace Windows Runtime Core Runtime Broker Windows Core
  • 15.
    Windows Metadata • Descriptioncomplète des APIs de WinRT (methodes, interfaces, types, espace de noms, etc.) • Généré depuis le compilateur C#/VB ou C++ • Intellisense complète • Définit pour chaque langage comment créer un objet depuis WinRT
  • 16.
  • 17.
    Architecture Windows Runtime Windows Store app Support des langages (CLR, WinJS, CRT) Projection des langages UI Pickers Controls Media Hôte Web (HTML, CSS, JavaScript)) Windows Metadata XAML Storage Network … & Namespace Windows Runtime Core Runtime Broker Windows Core
  • 18.
  • 19.
  • 20.
    Impose un ensemblede règles. • Classes Scellées – Classes Privées • Types Compatibles • Structure champs publiques • Pas de type générique personnalisé • Remontée des exceptions • Asynchronisme • …
  • 21.
    Les classes doiventêtre scellées public sealed class SampleClass { public int Add(int x, int y) { return x + y; } }
  • 22.
    Composant WinRT -C++/CX public ref class SampleRefClass sealed { public: double LogCalc(double input) { // Utilisation de la librairie standard C++. return std::log(input); } };
  • 23.
    Impose un ensemblede règles. Cohérence des types Type WinRT C++ JavaScript C#/VB (.NET) HSTRING Platform::String var (string) String GUID GUID var (string) GUID UInt32 uint32 var (double) uint32 DateTime (FILETIME) var (date) DateTimeOffset
  • 24.
    Composant WinRT -Exception • ABI -> Windows Runtime Exception • Exception non standard + ABI ->FailureException • Exception personnalisé – Exception standard (COMException ou dérivé) + HRESULT – C++ : Platform::Exception::CreateException()
  • 25.
    Composant WinRT -Exception • Composant managé – Pas de HRESULT – Evènement .NET standard – Mécanisme d’accès au dernier message d’erreur enregistré
  • 26.
  • 27.
    Composant WinRT etAsynchronisme • 4 interfaces – IAsyncAction – IAsyncActionWithProgress<TProgress> – IAsyncOperation<TResult> – IAsyncActionWithProgress<TResult,TProgress> • Ce sont les seuls types qui peuvent traverser la frontière (ABI) • Attention à la synchronisation de thread !!
  • 28.
  • 29.
  • 30.
    Ressources • Créer uncomposant WinRT en C++ – http://aka.ms/bjsqcj • Windows Runtime Library – http://aka.ms/rk503m • Pour aller plusde développement WRL Modèle loin : – http://aka.ms/ug45as
  • 31.
    Donnez votre avis! Depuis votre smartphone, sur : http://notes.mstechdays.fr De nombreux lots à gagner toutes les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les TechDays http://notes.mstechdays.fr
  • 32.
  • 33.
    The Windows Runtimewill automatically move your calls back to the right thread if proxies and stubs are available
  • 34.
    Aller plus loinavec la WRL • Porting COM components to Metro • No exceptions requirement • Interop with Com • No C++ extensions requirement • Fine grained control
  • 35.
    API Restrictions: Whatto expect? UI: MFC, GDI X UI: DirectX V still need to rethink user experience ISO C++ V VC++ Runtime (CRT, PPL, …) V C++/CLI X OS / Win32 V WinRT + Win32 subset COM / ATL V ATL subset 3rd party libraries ? it depends Everything else ? it depends

Notes de l'éditeur

  • #3 Intro code / devPoser les bases .1) Réutiliser de l&apos;existant.Vous avez depuis des années un composant, qui rempli sont rôle, que vous avez éprouvé, testé, et approuvé, pourquoi réinventer la roue ?2) Pour palier à des manques La plate-forme WinRT a été conçue, pour être la plus légère qui soit. Il est donc possible qu&apos;un certain nombre de &quot;fonctionnalités&quot; soient manquantes. 3) Impossibilité technique, ou difficulté accrue dans un langage.Si vous souhaitez manipuler des APIs du système qui sont difficile, voir même impossible à utiliser dans un langage.4) PerformanceDésormais, développer une application Windows 8, c&apos;est cibler des &quot;appareils&quot; qui n&apos;ont pas forcement le même niveau de performances, que votre PC de développement.Pas de SSD, moins de RAM, un processeur différent que le core I7-3770 à 3.4 GHz, comme les processeurs ARM par exemple (même si les prochaines générations de Tegra et Snapdragon qui arrivent, vont relever la barre.)
  • #4 Mentions these are not in order of importance. Hint of Windows on ARM, but don’t add it as a bullet.
  • #6 Comme vous pouvez le constater le FX est très Legé
  • #12 La porten’est pas fermée
  • #16 Comment çamarcheconcretement ?
  • #20 Different languages work together. Write Library code in C++ or C# consumable by all (but must be included in package).Subset of Win32 APIsAgain projectionJS casing exampleControl type differences across.Mix and match different languages. Windows runtime objects or components basically DllsWinMD files, can use subset of Win32 APIs, can expose functionality to all languages through “projection” We take care of making sure that these projections work in the way the origional language intended, controling types, casing, etc. Allows writing native C++ code with xaml UI.Adapted from slides 18 and 19 of PLAT-874T
  • #21 Script : Faireerreur avec List&lt;int&gt; en retour d’un composantwinrt en C#, montreralorsqueilfaut un Ilist&lt;int&gt;Montrer le code générédans ILSPYEnsuiteconsommation d’un Ivector&lt;Int&gt; c’est en C# un List&lt;Int&gt;MontrerIvector en C++ et consommer avec un List&lt;int&gt;
  • #42 Notation