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.