3. • Nouveau Runtime (WinRT)
• Nouvelle expérience utilisateur
• Nouvel environnement d’exécution
• Windows Store
Investissements Windows 8
4. La plateforme Windows 8
Windows Kernel Services
JavaScript
(Chakra)
C/C++ C#, VB
Windows Store Apps
Communication
& Data
Application Model
Devices &
Printing
Windows Runtime APIs
Graphics &
Media
XAML HTML / CSS
C
C++
C#
VB
HTML
JavaScript
Desktop Apps
Win32
.NET
SL
Internet
Explorer
SystemServicesView
Model
Controller
Kernel
10. Développer un composant WinRT
10
• Disponible pour tous les
langages
• Impose un ensemble de
règles.
Windows
Runtime
JavaScript
C#/VBC++
11. • 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
Quel langage choisir pour mon application Windows 8 ?
12. • 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 !!
Composants WinRT
14. Architecture du Windows Runtime
Windows
Metadata &
Namespace
Projection des Langages
Windows Core
Windows Runtime Core
XAML Storage …Network
UI Pickers MediaControls
Windows Store app
Runtime Broker
Support des
langages
(CLR, WinJS, CRT)
Web Host (HTML,
CSS, JavaScript))
15. • Description complète des APIs de WinRT (méthodes,
interfaces, types, espace de noms, etc.)
• Générées depuis le compilateur C#/VB ou C++
• Intellisense complète
• Définit pour chaque langage comment créer un objet
depuis WinRT
Windows Metadata
17. Architecture Windows Runtime
Windows Metadata
& Namespace
Projection des langages
Windows Core
Windows Runtime Core
XAML Storage …Network
UI Pickers MediaControls
Windows Store app
Runtime Broker
Support des
langages (CLR,
WinJS, CRT)
Hôte Web (HTML,
CSS, JavaScript))
20. • Classes Scellées
– Classes Privées
• Types Compatibles
• Structure champs publiques
• Pas de type générique personnalisé
• Remontée des exceptions
• Asynchronisme
• …
Impose un ensemble de règles.
21. Impose un ensemble de règles.
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
Cohérence des types
22. public sealed class SampleClass
{
public int Add(int x, int y)
{
return x + y;
}
}
Les classes doivent être scellées
23. Composant WinRT - C++/CX
public ref class SampleRefClass sealed
{
public:
double LogCalc(double input)
{
// Utilisation de la librairie standard C++.
return std::log(input);
}
};
24. • 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
25. • Composant managé
– Pas de HRESULT
– Evènement .NET standard
– Mécanisme d’accès au dernier message d’erreur
enregistré
Composant WinRT - Exception
27. • 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 !!
Composant WinRT et Asynchronisme
29. Pour aller plus loin :
• Performance
• Réutilisabilité
• Extensibilité
…avec une cohabitation harmonieuse des
langages !
Résumé
30. Pour aller plus loin :
• Créer un composant WinRT en C++
– http://aka.ms/bjsqcj
• Windows Runtime Library
– http://aka.ms/rk503m
• Modèle de développement WRL
– http://aka.ms/ug45as
Ressources
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
Notes de l'éditeur
Intro code / dev
Eric
Poser les bases .
1) Réutiliser de l'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'un certain nombre de "fonctionnalités" 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) Performance
Désormais, développer une application Windows 8, c'est cibler des "appareils" qui n'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.)
Mentions these are not in order of importance. Hint of Windows on ARM, but don’t add it as a bullet.
Comme vous pouvez le constater le FX est très Legé
Arnaud
WinRT permet de développer des applications Windows 8 en utilisant un langage ou plus !
La même infrastructure inter-langages utilisée pour créer des milliers d’APIs du Windows Runtime est disponible pour vous afin de bâtir vos propres APIs WinRT
La porte n’est pas fermée
Eric:
Attention aux couples CLR dépendant / CLR non dépendant comme JS / C# ou C++ / C#
Coût au niveau CPU et mémoire
Comment ça marche concretement ?
Arnaud
Different languages work together.
Write Library code in C++ or C# consumable by all (but must be included in package).
Subset of Win32 APIs
Again projection
JS casing example
Control type differences across.
Mix and match different languages. Windows runtime objects or components basically Dlls WinMD 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
Arnaud :
Script :
Faire erreur avec List<int> en retour d’un composant winrt en C#, montrer alors que il faut un Ilist<int>
Montrer le code généré dans ILSPY
Ensuite consommation d’un Ivector<Int> c’est en C# un List<Int>
Montrer Ivector en C++ et consommer avec un List<int>
Définir les bons contours (ABI)
Scellée, car la classe ne peut pas être utilisée comme une classe de base c’est une règle de WinRT
The hat (^) is one of the most prominent features of C++/CX--it's hard not to notice it when one first sees C++/CX code. So, what exactly is a ^ type? A hat type is a smart pointer type that (1) automatically
Windows Runtime reference types use reference counting for object lifetime management manages the lifetime of a Windows Runtime object and (2) provides automatic type conversion capabilities to simplify use of Windows Runtime objects.