XPCOM
Implanter une interface
Implanter une interface
Une interface possède un IID. Cette interface pourra être implantée par un ou plusieurs composants. Chaque composant devra alors présenter deux identifiants :
- Un Class ID, c'est-à-dire un UUID qui identifie l'implémentation ;
- Un Contract ID donnnant un nom au composant, sous forme d'une chaîne de caractère composée d'un nom de domaine, d'un nom d'implémentation, et d'un numéro de version (
@DOMAINE/NOM;VERSION
, par exemple@mozilla.org/download-manager;1
).
Les composants devront être placés dans le répertoire MOZILLA/dist/bin/components/
sous la forme suivante :
- Un fichier JavaScript pour les composants écrits en JavaScript ;
- Une bibliothèque chargée dynamiquement (DLL) pour les composants écrits en C++.
Il faudra ensuite assurer l'enregistrement des composants en créant un module (qui servira de factory), lequel sera lui-même trouvé de la manière suivante :
- Dans les fichiers JavaScript, en cherchant la fonction
NSGetModule
; - Dans les DLL, en appelant la fonction définie par la macro
NS_IMPL_NSGETMODULE
.
Chacune de ces opérations sera présentée dans un exemple : Exemple de création d'un composant.
Choix d'un langage
Le choix d'un langage de programmation pour écrire un composant doit être justifié par une des spécificités du langage. Seuls les langages JavaScript et C++ sont assurément supportés par le framework. Voici quelques critères de choix.
Avantages du langage JavaScript :
- Il est facile de programmer en JavaScript. Par ailleurs, le code n'est pas sujet aux problèmes de gestion de mémoire (cela est à la charge de l'interpréteur JavaScript).
- Le code est portable car il est interprété. Ce code est donc diffusable.
Inconvénients du langage JavaScript :
- Le code source doit être livré, ce qui est un inconvénient pour un composant qui ne doit pas être open source.
- Il est impossible de réaliser des appels de bas niveau. Il faut faire appel à des composants écrits en C++.
Avantages du langage C++ :
- Les performances sont de très haut niveau à l'exécution.
- On a directement accès au système, et on peut notamment exploiter toutes les primitives de bas niveau.
- Le code source n'a pas besoin d'être livré.
Inconvénient du langage C++ :
- Le langage C++ est très complexe.
- La gestion de la mémoire est laissée au développeur.
- Il faut apprendre à utiliser la NSPR et les smart pointers.
- Le composant doit être compilé pour la plateforme pour laquelle il est destiné.