Le meilleur des deux mondes !
Mon besoin initial est de porter une vieille application C/C++98 avec une librairie graphique obsolète (Borland OWL). La partie process va rester en C++ même si d'importantes améliorations sont à y apporter.
Pour l'interface utilisateur,
j'ai pensé éventuellement à Qt mais je préfère rester sur des technos les plus standard possible. Étant pationné aussi de techno web et souhaitant avoir une solution multi-plateformes, une interface web me semble clairement l'idéal, d'autant qu'il n'y a ni un besoin de performance, ni un graphisme évolué : formulaire, champ d'édition et un synoptique simple avec quelques animations.
en HTML5 - CSS - JavaScript… Ajax-jQuery, associé au DOM, on peut déjà faire ce qu'il faut côté interface, même sans serveur web.
Reste à trouver le moyen de lier cette interface graphique avec le code C++.
Plusieurs pistes s'offrent à nous :
- le code JS appelle la librairie C++
- le C++ vient lire/écrire le DOM
- l'utilisation d'un fichier d'échange JSON
1 - le code JS appelle la librairie C++
Pour des raisons assez évidentes de sécurité, ce n'est pas prévu! Il faut développer (à moins que ça existe) un plug-in… lié au navigateur… donc pas très élégant.
2 - le C++ vient lire/écrire le DOM
Les solutions qu'on peut touver ajoute une brique importante, comme par exemple le webtoolkit… pas très élégant non plus. Pour cela, il faut faire appel à des API comme le WebKit (développé notamment par apple) ou encore côté mozilla, le XPCOM lié à Gecko… on est donc dans ces cas, lié à un ou quelques navigateurs !
3 - l'utilisation d'un fichier d'échange JSON
Sans doute la meilleure solution: … le soucis dans ce cas est qu'en l'absence d'un “maître”, il faut créer un lanceur qui lance à la fois le navigateur web avec le script js d'un côté et l'exécutable C++ de l'autre... ce qui est facile via un script .sh sous linux ou un petit .bat ou équivalent plus moderne sous windows…
Mais là aussi, comme pour la solution 1, pour des raisons de sécurité, si on a bien getJSON, pas de setJSON … il faut donc un serveur! ou voir si la bonne solution ne serait pas plutôt la solution 2, accéder au DOM en C++ !
Un petit bout de code java (sans serveur?) ou PHP (là il faut un serveur) doit faire l'affaire pour créer le lien manquant…
4 - Cheerp, POCO ?
http://leaningtech.com/cheerp/
http://cppcms.com/wikipp/en/page/main
Ce mariage de technologie est intéressant soit pour avoir des performances élevées, soit pour arriver à tourner sur des "machines" peu performantes… dans l'embarqué dont … les smartphones
https://www.ubuntu.com/phone/developers et … https://developer.ubuntu.com/en/phone/apps/qml/
5 - node.js
http://stackoverflow.com/questions/14973224/javascript-communicate-with-c
… http://lupomontero.com/writing-node-js-modules-in-cpp/
https://nodejs.org/api/addons.html
Quelques liens glanés :
https://fr.wikipedia.org/wiki/Document_Object_Model
https://developer.mozilla.org/fr/docs/Web/API/R%C3%A9f%C3%A9rence_du_DOM_Gecko
https://developer.mozilla.org/en-US/docs/Mozilla/Mozilla_DOM_Hacking
https://isocpp.org/blog/tag/web
sur JSON:
https://bitbucket.org/tunnuz/json
J'exclue à priori les solutions telle que webtoolkit qui ajoute une brique supplémentaire et casse la philosophie technos standards au maximum!
http://cppdom.sourceforge.net/
http://xerces.apache.org/xerces-c/
https://0xef.wordpress.com/2013/10/22/calling-functions-in-dlls-from-javascript/