Julien Dollon | [Win8] Utilisez le C#, le C++ et le JavaScript ensemble

A goal without a plan is just a wish

My blog in english is here.

Je m’appelle Julien, j'ai 27 ans et je suis un ingénieur logiciel et secondairement manager d'Hommes/projets. Je concois les produits et services de demain. J'ai entre autre participé au developpement de Windows, XBOX, Office, Surface chez Microsoft (Redmond) et je suis maintenant chez Amazon AWS (Seattle) pour Marketplace/EC2/Workspace.

Je travaille dur pour un jour avoir un grand impact sur ce monde.

Mais comme il n’y a pas de titans à combattre, que les monstres n’existent pas, je fais du dev sur des produits, qui je l’espère, vous apporteront de la joie.

Plus d'infos sur moi ici.

 

View Julien  Dollon's profile on LinkedIn

Tous les posts de ce blog ne reflètent que mon opinion et pas celui de mes employeurs et clients.

 

Service d'evaluation de competences et de creation de site webs sur cahors.

[Win8] Utilisez le C#, le C++ et le JavaScript ensemble

Nous savons que WinRT est la nouvelle API Windows. WinRT propose des “languages projections” asynchrones pour C++, JavaScript (WinJS) et C# (WinRT for .NET).

A l’image de ce qu’on pouvait faire en .NET, qui traduisais le code en MSIL et permettait de faire cohabiter plusieurs langages, est il possible de faire de même dans une metro app?

Comme par exemple, avoir une vue en HTML/JavaScript qui appellerai une librairie C# et/ou C++.

Histoire de pouvoir tirer partie du meilleurs des deux (trois) mondes.

Le cas C++ ou C# souhaitant utiliser du JavaScript

Un peu comme propose PhoneGap, il est possible de hoster du HTML5/JavaScript dans une application C# ou C++.

En effet, il existe le contrôle WebView. L’équivalent du Silverlight WebBrowser (mais pas exactement le même, d’ou le changement de nom). Mais plusieurs problèmes a ca: il manque des fonctions tel que SaveToString() pour récupérer la sortie HTML. Le seul moyen d’interagir avec la WebView est de capter certain évènement comme le Uri changed et d’utiliser les méthodes InvokeScript/NavigateToString(source html).

Par exemple, si on veux retrouver le code source de la page:

string html = webview.InvokeScript("eval", new string[]
{"document.documentElement.outerHTML;"});

La question qu’on se pose est “peut-on utiliser du WinJS dans une WebView”, a priori non, puisque la webview évolue dans une sandbox tres spéciale, mais ce n’est pas impossible que certaines fonctionnalités soient utilisables avec un petit hack.

D’après certains développeurs Windows 8, la validation d’app du cote de chez Microsoft reste assez stricte et n’aime pas que l’on abuse de ces WebViews.

Le cas JavaScript souhaitant utiliser du C++ ou C#

Dans ce sens la, c’est plutôt simple! Il faut créer une assembly en C++ ou C# ou VB type class library, et rendre public et sealed les class que l’ont veux exposer aux meta data WinRT.

D’ailleurs pourquoi obliger nos class à être sealed? Apparemment ce n’est qu’une restriction au niveau de JavaScript. JS est capable de voir toutes les classes mais bug au moment de l’instanciation, je ne sais pas encore l’expliquer et peut être que cela changera à l’avenir.

Il ne faut pas oublier de changer les propriétés du projet pour générer une assembly avec metadata (prendre WinMD File).

2

 

3

Et on appelle le code C# de cette façon:

app.onloaded = function (eventObject) {
    var objet = new CSharpComponents.MyClass();
    document.getElementById("log").innerHTML = objet.test();
};

Est-il possible de créer des usercontrols XAML et de les exploiter en JavaScript?

La question peut être posée, nous savons qu’il n’est pas possible de créer de components exportable en JavaScript mais nous avons vu que nous pouvions le faire en C++ et C#.

JavaScript utilise WinJS qui ne contient pas la projection du namespace XAML. On peut toujours essayer de créer un UserControl dans une assembly .NET, la rendre sealed et compiler. Mais a l’exécution il y aura une erreur.

Tout simplement parce que Windows 8 utilise le moteur de rendu de IE10 quand nous sommes dans une metro app, il n’est donc pas capable d’afficher du XAML.

Conclusion

Donc a quel moment choisir JavaScript, C++ ou C#? Seul vous pouvez répondre a la question. Tout dépends des connaissances de l’équipe, de l’existant, des besoins. Voici un tableau comparatif qui peut vous aider a faire votre choix:

language

Tout comme en .NET, je pense que ce cas de figure arrivera rarement, ne serais ce qu’en cas de maintenabilité. Mais je trouve ca terrible de pouvoir faire cohabiter tout ce petit monde Sourire.

Posté le: May 24 2012, 00:56 | Commentaires
Catégorie(s): WinRT | .NET

blog comments powered by Disqus
Anciens commentaires (archive):