Attention : Le contenu de ces pages n'a pas été mis à jour depuis au moins 2016.
Les informations techniques ne sont pertinentes que pour les versions 4.0 maximum de Firefox/Gecko.
Il est fort probable que des liens vers des sites web externes ne fonctionnent plus.

Flat api

Si vous voulez qu'une instance JS de votre composant XPCom qui implémente plusieurs interfaces expose toutes les méthodes de vos interfaces pour éviter d'avoir à jongler avec les queryInterface, il faut que votre composant implémente l'interface nsIClassInfo.

La méthode qui permet ça est: getInterfaces.

En C++, on liste déjà les interfaces lors de l'appel de la macro NS_IMPL_ISUPPORTS ou NS_INTERFACE_MAP_ENTRY.

Voici un petit jeu de macro qui évite d'avoir à répéter cette liste d'interfaces:

 NS_IMPL_ADDREF(nsFoobar)
 NS_IMPL_RELEASE(nsFoobar)
 #define FOO_IMPL(_interface) NS_INTERFACE_MAP_ENTRY(_interface)
 #define FOO_INTERFACES 
	FOO_IMPL(nsIFoobar) 
	FOO_IMPL(nsIToto) 
	FOO_IMPL(nsITiti) 
	...
	FOO_IMPL(nsIClassInfo)
 NS_INTERFACE_MAP_BEGIN(nsFoobar)
	NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIFoobar)
	FOO_INTERFACES
 NS_INTERFACE_MAP_END
 #undef FOO_IMPL
 #define FOO_IMPL(_interface) &NS_GET_IID(_interface),
 static const nsIID *interface_list[] = {
	FOO_INTERFACES
 };

Ensuite, il suffit de construire dans la méthode getInterfaces l'array que l'on remplira à partir de interface_list.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.