le développement d’un composant winrt

35
Accélérateur Windows Ressources Coaching Visibilité aka.ms/ accelerateur -windows Plus d’info ? RDV stand Windows 8 L’Accélérateur Windows

Upload: microsoft

Post on 24-May-2015

165 views

Category:

Documents


0 download

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

Page 1: Le développement d’un Composant WinRT

Accélérateur Windows

Ressources

Coaching

Visibilité

aka.ms/accelerateur-windows

Plus d’info ? RDV stand Windows 8

L’Accélérateur Windows

Page 2: Le développement d’un Composant WinRT

Développer un composant WinRT

Eric VerniéArnaud Auroux

Code / Développement

Page 3: Le développement d’un Composant WinRT

• Nouveau Runtime (WinRT)

• Nouvelle expérience utilisateur

• Nouvel environnement d’exécution

• Windows Store

Investissements Windows 8

Page 4: Le développement d’un Composant WinRT

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

Page 5: Le développement d’un Composant WinRT

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

Page 6: Le développement d’un Composant WinRT

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

Page 7: Le développement d’un Composant WinRT

• Performance

• Réutilisabilité

• Extensibilité

Pourquoi développer un Composant WinRT ?

Page 8: Le développement d’un Composant WinRT

demoPROTOCOLE OSCRéutilisation de code

Page 9: Le développement d’un Composant WinRT

Windows Runtime (WinRT)

APIs WindowsInfrastructure

Cross-langage

Page 10: Le développement d’un Composant WinRT

Développer un composant WinRT

10

• Disponible pour tous

les langages

• Impose un ensemble

de règles.

Windows

Runtime

JavaScript

C#/VBC++

Page 11: Le développement d’un Composant WinRT

• 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 ?

Page 12: Le développement d’un Composant 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 !!

Composants WinRT

Page 13: Le développement d’un Composant WinRT

demoCODE HYBRIDE JAVASCRIPT ET C++

Page 14: Le développement d’un Composant WinRT

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))

Page 15: Le développement d’un Composant WinRT

• 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

Page 16: Le développement d’un Composant WinRT

demoILSPY

Page 17: Le développement d’un Composant WinRT

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))

Page 18: Le développement d’un Composant WinRT

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

Page 19: Le développement d’un Composant WinRT

demoPROJECTION

Page 20: Le développement d’un Composant WinRT

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.

Page 21: Le développement d’un Composant WinRT

public sealed class SampleClass{ public int Add(int x, int y) { return x + y; }}

Les classes doivent être scellées

Page 22: Le développement d’un Composant WinRT

Composant WinRT - C++/CXpublic ref class SampleRefClass sealed{public: double LogCalc(double input) { // Utilisation de la librairie standard C++. return std::log(input); }};

Page 23: Le développement d’un Composant WinRT

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

Page 24: Le développement d’un Composant WinRT

• 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

Page 25: Le développement d’un Composant WinRT

• Composant managé– Pas de HRESULT

– Evènement .NET standard

– Mécanisme d’accès au dernier message d’erreur enregistré

Composant WinRT - Exception

Page 26: Le développement d’un Composant WinRT

demoEXCEPTION

Page 27: Le développement d’un Composant WinRT

• 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

Page 28: Le développement d’un Composant WinRT

demoASYNCHRONISME

Page 29: Le développement d’un Composant WinRT

QUESTIONS

Page 30: Le développement d’un Composant WinRT

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

Page 31: Le développement d’un Composant WinRT

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

Page 32: Le développement d’un Composant WinRT

Backup

Page 33: Le développement d’un Composant WinRT

The Windows Runtime will automatically move your calls back to the right thread if proxies and stubs are available

Page 34: Le développement d’un Composant WinRT

• Porting COM components to Metro• No exceptions requirement• Interop with Com • No C++ extensions requirement• Fine grained control

Aller plus loin avec la WRL

Page 35: Le développement d’un Composant WinRT

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