Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# [Résolu] Composant XPCOM simple en C++

Envoyé par : jcs

Date : 26/11/2007 11:02

Pour une application basée sur XulRunner j'ai besoin d'écrire d'un binding avec une bibliothèque externe. N'étant vraiment pas un habitué du C++ j'ai décidé de commencer en écrivant un tout petit composant qui additionne 2 entiers et renvoie le résultat.

Donc j'ai écrit mon IDL, exécuté xpidl pour générer le .xpt et le .h. Ensuite j'ai codé mon composant le le module nécessaire au chargement puis j'ai compilé le tout avec le SDK de XulRunner fraichement téléchargé. J'ai enfin placé avec le .xpt et la bibliothèque dans le répertoire components de mon application... Et bien sûr le composant ne se charge pas.

Bon j'ai clairement pu me tromper à plein d'endroits. Donc si quelqu'un sait où je peux trouver un exemple de composant xpcom simple et qui fonctionne je pourrais essayer de comprendre pourquoi le mien refuse de se charger.

Merci

# Re: Composant XPCOM simple en C++

Envoyé par : Paul Rouget

Date : 26/11/2007 13:43

Il y a un composant d'exemple dans les sources de Mozila:

http://mxr.mozilla.org/mozilla/source/xulrunner/examples/simple/

# Re: Composant XPCOM simple en C++

Envoyé par : jcs

Date : 27/11/2007 08:04

Merci.

Bon j'ai trouvé pourquoi mon composant ne se charge pas en affichant un peu de log :

...
-1238169920[8052550]: nsNativeModuleLoader::LoadModule("/home/sirot/svn/tduck/trunk/app/components/tdService.so") - load FAILED, rv: 80004005, error:
       /home/sirot/svn/tduck/trunk/app/components/tdService.so: undefined symbol: _Z16NS_TableDrivenQIPvPK12QITableEntryRK4nsIDPS_
...

et Effectivement :

$> nm -g ~/svn/tduck/trunk/app/components/tdService.so
0000119c T NSGetModule
         U NS_StringContainerFinish
         U NS_StringContainerInit
         U NS_StringCopy
         U PR_GetSpecialFD
         U PR_fprintf
         w _Jv_RegisterClasses
         U _Z16NS_TableDrivenQIPvPK12QITableEntryRK4nsIDPS_
         U _Z20NS_NewGenericModule2PK12nsModuleInfoPP9nsIModule
...

J'avoue, j'ai voulu compiler le .so à la main, c'est à dire en dehors du système de build de Mozilla. Et après avoir lu quelques pages du wiki du MDC ça ne semble pas la bonne façon de faire.

Recompiler XulRunner pourquoi pas, ce n'est pas le première fois que je le fait. Cependant ça me semble un peu compliqué de faire rentrer l'arbre de source du composant dans mon subversion : pas facile de suivre les modifications des fichiers si à chaque fois que je veux le compiler je dois le copier dans l'arbre de source de Mozilla.

# Re: Composant XPCOM simple en C++

Envoyé par : Paul Rouget

Date : 27/11/2007 11:44

Ne met dans ton svn que le répertoire que tu compileras dans l'arbre mozilla. C'est comme ça que je procède et ça fonctionne bien.

# Re: Composant XPCOM simple en C++

Envoyé par : jcs

Date : 27/11/2007 14:39

C'est effectivement ce que je comptais faire.

Sinon, j'ai compilé mon module dans le système de build de Mozilla et finalement ça fonctionne.

# Re: Composant XPCOM simple en C++

Envoyé par : Paul Rouget

Date : 27/11/2007 16:17

donc résolu ?

# Re: Composant XPCOM simple en C++

Envoyé par : jcs

Date : 27/11/2007 17:17

Oui. J'avais oublié de mettre jour le fil. Il ne me reste plus qu'à bien comprendre ce qu'il faut mettre dans les différents fichiers Makefile.in.

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.