Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : will

Date : 09/02/2008 04:42

Bonjour,

je suis en train de tenter de lancer l'exemple fait par ce site : http://www.iosart.com/firefox/xpcom/ à partir de Xulrunner, j'ai donc généré les fichiers so et xpt qui se lance (non sans difficulté sous firefox 2.0.0.11). Mais le passage sous Xulrunner ne se fait pas non plus sans douleur, puisque le chargement dans mon fichier compreg.dat je vois :

abs:/home/will/prog/XUL/test2/components/MyComponent.so,1202524633000

(que signifie abs ?)

De plus :

./run-mozilla.sh `which ldd` -r ~/prog/XUL/test2/components/MyComponent.so
linux-gate.so.1 => (0xffffe000)
libxpcom.so => ./libxpcom.so (0xb7fe8000)
libnspr4.so => ./libnspr4.so (0xb7fb7000)
libplds4.so => ./libplds4.so (0xb7fb3000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7eb3000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e8c000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e80000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d3f000)
libxul.so => ./libxul.so (0xb71ba000)
libplc4.so => ./libplc4.so (0xb71b6000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb719f000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb719b000)
/lib/ld-linux.so.2 (0x80000000)
libmozjs.so => ./libmozjs.so (0xb70fa000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb7009000)
libXft.so.2 => /usr/lib/libXft.so.2 (0xb6ff6000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6fee000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6fc3000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb6f58000)
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb6c00000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb6b7a000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb6b5e000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb6b47000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb6b3f000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb6b01000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb6a91000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb6a57000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb6a53000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb69be000)
libXt.so.6 => /usr/lib/libXt.so.6 (0xb696d000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb696a000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb6965000)
libz.so.1 => /usr/lib/libz.so.1 (0xb6950000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6930000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb692b000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb691d000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb691a000)
libXi.so.6 => /usr/lib/libXi.so.6 (0xb6911000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb690b000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb6902000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb68d7000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb68b4000)
libSM.so.6 => /usr/lib/libSM.so.6 (0xb68aa000)
libICE.so.6 => /usr/lib/libICE.so.6 (0xb6892000)

Ce qui semble correct aussi, j'ai aussi effacé les fichiers compreg.dat et xpti.dat du répertoire ~/.test/test2/f1223983.default/ avant toute execution supplémentaire.

J'ai surement oublié de faire quelque chose, mais je ne vois pas quoi... (j'ai déjà parcourus cette page : http://developer.mozilla.org/en/docs/Tr(..))

Merci.

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : Paul Rouget

Date : 09/02/2008 12:43

abs: chemin absolu (et rel, chemin relatif).

Ton composant a donc l'air de s'etre enregistré. Un alert(Cc"contractID") te donne quoi ? Après, ça peut être une incompatibilité de version. Quelle version de XulRunner utilises tu ?

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : will

Date : 09/02/2008 20:46

Bonjour, merci pour ta réponse, oui j'ai oublié de spécifier que j'utilise :

$c++ -v
Utilisation des specs internes.
libraries: i486-linux-gnu
Configuré avec: ../src/configure -v >--enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release >i486-linux-gnu
Modèle de thread: posix
version gcc 4.1.2 (Ubuntu 4.1.2-0ubuntu4)

$ xulrunner -v
Mozilla XULRunner 1.8.1.3_0000000000

et mon gecko SDK :

xulrunner-1.8.1.3.en-US.linux-i686.sdk-20080128

la commande alert(Cccid); avec const cid = "@mydomain.com/test2/MyComponent;1"; ne donne rien (je ne sais pas comment afficher la console JavaScript dans Xulrunner, je vais regarder ça)

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : will

Date : 09/02/2008 23:14

Ok,

si je défini :

const cid = "@mydomain.com/test2/MyComponent;1";
const Cc = Components.classes;

alert(Cccid); me retourne undefined

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : will

Date : 12/02/2008 04:13

Bonjour,

En essayant de suivre cette page http://xulfr.org/wiki/DebugXPCom

LD_PRELOAD=MyComponent.so lsERROR: ld.so: object 'MyComponent.so' from LD_PRELOAD cannot be preloaded: ignored.

Je seche sur les causes possible ...

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : will

Date : 12/02/2008 13:24

Bonjour, si je rajoute des PR_fprintf, ca passe dans le NS_IMPL_NSGETMODULE, mais pas dans les constructeur/destructeur du composant.

#include <nspr.h>
#include "nsIGenericFactory.h"
#include "MyComponent.h"
NS_GENERIC_FACTORY_CONSTRUCTOR(MyComponent)
static NS_METHOD nsFoobarRegistrationProc(nsIComponentManager *aCompMgr,
                                          nsIFile *aPath,
                                          const char *registryLocation,
                                          const char *componentType,
                                          const nsModuleComponentInfo *info)
{
    PR_fprintf(PR_STDOUT, "Composant MyComponent chargé \n");
    return NS_OK;
}
static nsModuleComponentInfo components[] =
{
    {
       MY_COMPONENT_CLASSNAME, 
       MY_COMPONENT_CID,
       MY_COMPONENT_CONTRACTID,
       MyComponentConstructor,
       nsFoobarRegistrationProc
    }
};
NS_IMPL_NSGETMODULE("MyComponentsModule", components)@@

(rien d'exotique ...)

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : Paul Rouget

Date : 13/02/2008 14:44

Tu compiles avec le SDK ou dans l'arbre de compil de Firefox (ce que je te conseille fortement pour éviter ce genre de soucis).

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : will

Date : 13/02/2008 18:28

Bonjour Paul,

je ne suis pas sur de comprendre ta réponse, pour faire un composent Xulrunner, je dois passer par cette manipulation : http://developer.mozilla.org/en/docs/Cr(..) ? cad compiler mon composant avec Xulrunner ?

Désolé si ma question parait stupide, mais qu'est-ce que tu appelles compiler avec le SDK ? Je ne crois pas avoir vu de compilateur dans le Gecko SDK. As-tu un lien traitant du problème ?

# Re: Composant qui ne s'enregistre pas sous Xulrunner

Envoyé par : Paul Rouget

Date : 14/02/2008 13:12

Pour compiler un composant, il te faut les headers et les libs de Gecko. Soit tu utilises le SDK (ce que tu fais si j'ai bien compris, mais on le déconseille), soit tu utilises le system de build de Mozilla (la doc que tu pointes est *la* solution).

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.