Grâce au Windows Runtime, Windows 8 fournit un nouveau modèle de développement qui offre un choix varié de langages pour la conception d'applications Modern Style. Cette session montrera comment tirer partie de ce nouveau modèle pour créer une API accessible quelque soit le langage utilisé via la création de composants pour WinRT.
3. Investissements Windows 8
• Nouveau Runtime (WinRT)
• Nouvelle expérience utilisateur
• Nouvel environnement d’exécution
• Windows Store
4. 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
10. Développer un composant WinRT
JavaScript
• Disponible pour tous les
langages
Windows
• Impose un ensemble de Runtime
règles. C++ C#/VB
10
11. 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
12. 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 !!
14. 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
15. 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
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
20. 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
• …
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 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
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é
27. 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 !!
30. 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
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
33. The Windows Runtime will automatically
move your calls back to the right thread if
proxies and stubs are available
34. Aller plus loin avec la WRL
• Porting COM components to Metro
• No exceptions requirement
• Interop with Com
• No C++ extensions requirement
• Fine grained control
35. 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
Editor's Notes
Intro code / devPoser 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) PerformanceDé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é
La porten’est pas fermée
Comment çamarcheconcretement ?
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
Script : Faireerreur avec List<int> en retour d’un composantwinrt en C#, montreralorsqueilfaut un Ilist<int>Montrer le code générédans ILSPYEnsuiteconsommation d’un Ivector<Int> c’est en C# un List<Int>MontrerIvector en C++ et consommer avec un List<int>