Envoyé par : JeremieL
Date : 20/07/2007 09:52
Bonjour. J'ai créé un composant XPCOM en C++ (qui implémente un arbre binaire avec un caractère à chaque noeud). J'arrive à compiler, j'arrive à instancier le composant, par contre impossible de lire (et à priori d'écrire) les attributs dans le Javascript de mon extension.
Voici mon code :
IBinaryTree.idl :
#include "nsISupports.idl" #include "nsICollection.idl" [scriptable, uuid(38865887-52d6-4b2a-beb2-417144da8207)] interface IBinaryTree : nsISupports { attribute IBinaryTree filsGauche; attribute IBinaryTree filsDroit; attribute char c; };
BinaryTree.h :
#ifndef _BINARYTREE_H_ #define _BINARYTREE_H_ #endif #include "IBinaryTree.h" #define BINARYTREE_CONTRACTID "@jeremiel.com/BinaryTree;1" #define BINARYTREE_CLASSNAME "BinaryTree" #define BINARYTREE_CID \ {0x24ea9116, 0x28ac, 0x11dc, \ { 0x83, 0x14, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }} /* Header file */ class BinaryTree : public IBinaryTree { public: NS_DECL_ISUPPORTS NS_DECL_IBINARYTREE BinaryTree(); IBinaryTree* mFilsGauche; IBinaryTree* mFilsDroit; char mC; private: virtual ~BinaryTree(); protected: /* additional members */ };
Et enfin BinaryTree.cpp :
#include "BinaryTree.h" #include "nsStringAPI.h" //#include "nsString.h" #include "nspr.h" #include "xpcom-config.h" #include "nsMemory.h" #include "nsXPCOM.h" #include <stdio.h> NS_IMPL_ISUPPORTS1(BinaryTree, IBinaryTree) BinaryTree::BinaryTree() { NS_INIT_ISUPPORTS(); } BinaryTree::~BinaryTree() { } NS_IMETHODIMP BinaryTree::GetFilsGauche(IBinaryTree **aFilsGauche) { *aFilsGauche = this->mFilsGauche; return NS_OK; } NS_IMETHODIMP BinaryTree::SetFilsGauche(IBinaryTree *aFilsGauche) { this->mFilsGauche = aFilsGauche; return NS_OK; } NS_IMETHODIMP BinaryTree::GetFilsDroit(IBinaryTree **aFilsDroit) { *aFilsDroit = this->mFilsGDroit; return NS_OK; } NS_IMETHODIMP BinaryTree::SetFilsDroit(IBinaryTree *aFilsDroit) { this->mFilsGauche = aFilsGauche; return NS_OK; } NS_IMETHODIMP BinaryTree::GetC(char *aC) { *aC = this->mC; return NS_OK; } NS_IMETHODIMP BinaryTree::SetC(char aC) { this->mC = aC; return NS_OK; }
Et dans mon Javascript, quand je fais :
var composant = Components.classes["@jeremiel.com/BinaryTree;1"].createInstance(Components.interfaces.IBinaryTree); alert(composant instanceof Components.interfaces.IBinaryTree);
A l'exécution ça m'affiche "true".
Par contre,
composant.filsGauche = composant;; composant.c = 'a'; alert(composant.filsGauche instanceof Components.interfaces.IBinaryTree); alert(composant.c);
ça m'affiche "false" puis rien (boîte d'alerte vide).
Ai-je fait quelque chose pas comme il faut ? D'avance, merci. :)
Envoyé par : Paul Rouget
Date : 21/07/2007 03:34
et si tu utilises wchar ?
Si tu fais un printf de ton char dans le getter ça donne quoi ?
Envoyé par : JeremieL
Date : 21/07/2007 12:05
Hem... Non ben ça a fini par marcher... Je crois que j'avais mal configuré mon projet VS, le .dll ne s'enregistrait pas dans le bon répertoire, et du coup mes modifications n'étaient pas prises en compte.
Quel boulet je fais.
Donc avec char ça marche bien. J'ai mis les affectations pour les "GetFils..." dans des NS_ADDREF :
NS_ADDREF(*aFilsGauche = this->mFilsGauche);
Et j'ai rajouté quelques tests pour mieux gérer la mémoire. Mais dans l'état je crois que ça marche.
Merci Paul Rouget pour ta réponse, et désolé pour le dérangement.
Il n'est plus possible de poster des messages dans ce forum.
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.