Le Post Infeeny

Les articles des consultants et experts Infeeny

Using the Windows Runtime from C# and Visual Basic

Message de Roch Baduel (Le 15-09-2011)

Avant i l y avait un gap entre l’api utilisée par windows et .NET à Interrop / Pinvoke. Maintenant les API WinRT sont accessibles directement.

Managed Code à Windows Runtime à Windows 8

Relation entre .NET et Windows Runtime

  • WinRT a été influencé par C# et VB
  • WinRT est prévu pour les langages orientés objet
  • On été introduit la notion de classe, constructeur, events, …
  • Metadata : WinRT utilise une version mise à jour du format de metadata de .NET
  • Démo : utilisation de ildasm pour visualiser les metadata (répertoire winmetadata dans system32) à ouverture dans ildasm ! fichiers *.winmd
  • Toutes les apis sont décrites
  • WinRT inclus un framework XAML pour les applications metro
  • Les design guidelines de .NET ont été utilisées pour WinRT

Utiliser le Windows Runtime depuis C# et VB :

  • Pas de Pinvoke !
  • Exemple : CameraCaptureUI, CaptureFileAsync()
  • Tout fonctionne comme si c’était du .NET :

Intellisense
Complétion …

  • Exemple : DataTransfertManager : implémente le share contract
  • IRandomAccessStream
  • On peut utiliser await avec les apis WinRT
  • Il y a un équivalent direct entre WinRT et .NET (classe, type, constructeurs, …)
  • Il y a cependant des différences mais elles sont masquées pour le développeur .NET

WinRT utilise des HRESULT alors que .Net utilise des exceptions mais ceci est mappé
Les opérations sur lesquelles ont utilise await ne retourne pas une task mais une classe qui implémente IAsyncOperation
Les collections (interfaces) de winrt sont mappées sur les collections .NET

  • Dans certains cas (deux seulement) il est nécessaire d’utiliser une extension method pour mapper :

Stream IInputStream.AsStream() : permet de convertir un stream WinRT en stream .NET
IBuffered : AsBuffer() : permet de renvoyer une interface IBuffered (WinRT) depuis par exemple un tableau de byte

On peut écrire des composants windows runtime en  C#

  • Quand le faire : pour être utiliser en C++ et JS en plus de C#
  • Pour windows runtime rien de particulier : sealed class – output winrt library
  • Il y a quelques règles :

Elle ne s’applique qu’aux membres publics !
Les signature de méthodes ne doivent utiliser que les types WinRT
Les Struct ne contiennent que des champs public
Les structs ne peuvent avoir de méthodes à pure data
L’héritage ne peut être utilisé que pour les types XAML, sinon àsealed
On ne peut utiliser que les types generic fournis par le system
Le compilateur avertira en tout cas
Exemple pour les signature : ne pas renvoyer Task mais IAsyncOperation (via IAsyncFactory)

  • Visual studio a un template pour les composants WinRT
  • Dans les projets librairie C# choisir output type WinMD File
  • Lors de l’accès en javascript les propriétés, méthodes sont transcrites de PascalCase à camelCase pour s’adapter aux conventions javascript.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :