Ecriture d'un composant XPCOM

Voici le contenu de trois fichiers contenant un exemple basique d'un composant XPCOM (tirés du tutorial dont le lien est donné en fin de page).

Le fichier de définition d'interface '.idl' :

#include "nsISupports.idl"

[scriptable, uuid(90758A97-A6F3-4ea4-8953-16BD2EE3A977)]  // Valeur donnée uniquement à titre d'exemple ; à changer.
  interface IMyComponent : nsISupports
{
  long Add(in long a, in long b);  // Exemple de fonction.
};

Le fichier d'entête C++ '.h' ou '.hpp' :

#ifndef _MY_COMPONENT_H_
#define _MY_COMPONENT_H_
 
#include "IMyComponent.h"  // Ce fichier est génèré à partir du '.idl' correspondant.
 
#define MY_COMPONENT_CONTRACTID "@mydomain.com/XPCOMSample/MyComponent;1"  // A remplacer par des valeurs à votre convenance.
#define MY_COMPONENT_CLASSNAME "A Simple XPCOM Sample"  // Idem.
#define MY_COMPONENT_CID  { 0x597a60b0, 0x5272, 0x4284, { 0x90, 0xf6, 0xe9, 0x6c, 0x24, 0x2d, 0x74, 0x6 } }  // Valeur donnée uniquement à titre d'exemple ; à changer.
 
/* Header file */
class MyComponent : public IMyComponent
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_IMYCOMPONENT
 
  MyComponent();
  virtual ~MyComponent();
  /* additional members */
};
 
 
#endif //_MY_COMPONENT_H_

Les identifiants peuvent être obtenus grâce à guidgen sous Windows ou uuidgen sous Linux. Celui du fichier .idl et celui du fichier .h ou .hpp doivent1) être différents.

Le fichier d'implémentation C++ '.cpp' :

#include "MyComponent.h"
 
NS_IMPL_ISUPPORTS1(MyComponent, IMyComponent)
 
MyComponent::MyComponent()
{
  /* member initializers and constructor code */
}
 
MyComponent::~MyComponent()
{
  /* destructor code */
}
 
/* long Add (in long a, in long b); */
NS_IMETHODIMP MyComponent::Add(PRInt32 a, PRInt32 b, PRInt32 *_retval)  // Exemple de fonction.
{
	*_retval = a + b;
	return NS_OK;
}

Liens

1) à priori ; à vérifier …
other/gecko/xpcom/writing/base.txt · Last modified: 2005/04/19 14:37 by 217.167.194.108
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki