le développement d’un composant winrt
DESCRIPTION
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.TRANSCRIPT
Accélérateur Windows
Ressources
Coaching
Visibilité
aka.ms/accelerateur-windows
Plus d’info ? RDV stand Windows 8
L’Accélérateur Windows
Développer un composant WinRT
Eric VerniéArnaud Auroux
Code / Développement
• Nouveau Runtime (WinRT)
• Nouvelle expérience utilisateur
• Nouvel environnement d’exécution
• Windows Store
Investissements Windows 8
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
CC++
C#VB
HTMLJavaScri
pt
Desktop Apps
Win32
.NET SL
Internet Explore
r
Syst
em
Serv
ices
Vie w
Mod
el
Con
trolle
r
Kern
el
WinRT APIs
FundamentalsApplication
Services Threading/Timers Memory Management Authentication Cryptography Globalization
Devices
Geolocation Portable Sensors NFC
User Interface
SVG Tiles Input Accessibility Printing
HTML5/CSS XAML DirectX Controls Data Binding
Communications & Data
Memory Management XML Networking SMS
Notifications Streams
Contracts Local & Cloud Storage Web
Media
Playback Capture PlayTo Visual Effects
Environnement d’exécution
Core
OS
Direct API calls
App Container + Signed & Validated code
Votre application
WinRT APIs
Process.exe Runtime
Broker
Brokered API calls
AppXManifest
• Performance
• Réutilisabilité
• Extensibilité
Pourquoi développer un Composant WinRT ?
demoPROTOCOLE OSCRéutilisation de code
Windows Runtime (WinRT)
APIs WindowsInfrastructure
Cross-langage
Développer un composant WinRT
10
• Disponible pour tous
les langages
• Impose un ensemble
de règles.
Windows
Runtime
JavaScript
C#/VBC++
• 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 ?
• 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
demoCODE HYBRIDE JAVASCRIPT ET C++
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))
• 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
Windows Metadata
demoILSPY
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))
Projection du Langage
ObjetWindowsRuntime
(ou composant)
Ecriten C++, C#, VB
Windows Metadata
C++ App
Pro
jecti
on
CLR
C#/VB App
Pro
jecti
on
HTML AppCh
akra
Pro
jecti
on
demoPROJECTION
A
• 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.
public sealed class SampleClass{ public int Add(int x, int y) { return x + y; }}
Les classes doivent être scellées
Composant WinRT - C++/CXpublic 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.
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
• 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é
Composant WinRT - Exception
demoEXCEPTION
• 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
demoASYNCHRONISME
QUESTIONS
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
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
• Porting COM components to Metro• No exceptions requirement• Interop with Com • No C++ extensions requirement• Fine grained control
Aller plus loin avec la WRL
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
View
Model
Other