Programmation XPCom pour XUL

Cross-platform Component Object Model

Qu'est-ce que XPCom?

C'est une plateforme de développement de composants logiciels.
C'est un moyen de créer des librairies de fonctions réutilisables, ou sous un autre point de vue, de morceler des programmes en composants indépendant, construits séparément.
XPCom sépare le composant en deux parties: l'implémentation, donc le code, et l'interface, la partie publique.
Le format prévoit de faire évoluer le code, tout en maintenant la compatibilité avec les versions précédente.

Pourquoi utiliser XPCom?

- XPCom s'utilise avec Gecko, le programme d'affichage HTML et XML de Mozilla. Il permet d'intégrer Gecko dans une application.
- C'est une alternative aux DLL de Windows, avec l'avantage de fonctionner sur les principaux systèmes (Donc Windows, Linux, MacOS).
- On peut mettre à jour les composants sans réécrire l'application entière.
- On ne charge en mémoire que les composants utilisés.
- La tâche de programmation est divisée sur les gros programmes. Il est plus facile de travailler avec des composants spécialisés, de taille réduite.

et surtout...

- XPCom est indispensable quand on utilise XUL, car il permet d'utiliser des librairies écrites dans d'autres langages que JavaScript, lequel ne permet par le traitement de fichiers notamment.

Comment utiliser XPCom?

Pour utiliser un composant, on crée une instance de la classe qui, dans l'interface, représente ce composant.
Il y a aussi des objets appelés services, qui sont l'objet d'une unique instance.
Les services fournissent un point d'accès unique aux fonctionnalités du composant.

Vocabulaire

XPConnect

C'est une surcouche de XPCom qui permet à des langages de scripts d'utiliser un composant.
XPConnect consiste en une représentation binaire de l'interface, générée à partir de la définition de l'interface dans le langage de définition d'interface, XPIDL.

L'interface nsISupport

C'est l'interface de base XPCom. Elle traite à la fois de la question de la durée d'utilisation du composant et des requêtes.
Elle gère le compteur de référence. Elle gère les requêtes.
Dans la pratique, c'est une classe avec quelques méthodes aux noms cabalistiques.

Comment créer un composant XPCom

Le plus fréquemment, c'est un programme en C ou C++ et compilé sous forme de DLL sous Windows, ou DSO sous Unix.
Ce module va exporter une méthode unique appelée NSGetModule. Cette méthode est le point d'entrée dans le module, autrement dit, on va appeler cette méthode avec certains paramètres pour utiliser les fonctions du module.
Il y a aussi deux interfaces qui contrôlent la création du module:

Les outils de XPCom

Ces outils sont inclus dans le SDK Gecko.

Création d'une interface

Elle s'appelle par exemple: Zool. Le fichier de génération d'interface sera IZool.idl.
Le modèle ci-dessous peut être réutilisé.

#include "nsISupports.idl"

[ scriptable, uuid(votreGUID) ] 
interface IZool : nsISupports 
{ 
  long Add(in long a, in long b);
};

Ensuite vous utilisez xpidl pour générer l'interface.
D'abord, générer l'en-tête:

xpidl -m header -Idiringecko IZool.idl

Puis créer le typelib:

xpidl -m typelib -Idiringecko IZool.idl

Vous disposez maintenant d'un fichier IZool.h qui contient un modèle d'en-tête.

Création de Zool.h (ne pas confondre avec IZool.h)


Création de Zool.cpp qui contient votre code:
Création du fichier de définition de module ZoolModule.cpp.

Création du projet pour Windows

Cela peut se faire avec l'interface graphique, ou un makefile.

© 2006 Xul.fr