le développement d’un composant winrt

Post on 24-May-2015

165 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related