Envoyé par : guillaume
Date : 20/04/2007 12:11
J'ai pris pour base le sample fourni par mozilla dans /home/guillaume/xulrunner_source/mozilla/modules/plugin/tools/sdk/samples/scriptable/unix. J'ai bien réussi à compiler mon plugin. Mais un petit problème subsiste : Mozilla ne le detecte pas !
Voici les étapes de mon travail : J'ai placé les sources de mon plugin/composantXPCOM dans un répertoire "scriptable", crée dans le répertoire extensions du source de XUlrunner.
J'ai aussi compilé les fichiers du repertoire common : npentry.cpp, npn_gate.cpp et npp_gate.cpp. J'ai vu qu'ils sont nécessaires : ils implémentent les méthodes de communications entre le browser et le plugin : NPP_..., NPN_... etc... J'obtient une biliothèque libplugingate_s.a, à placer dans le répertoire dist/lib afin que la compilation de mon plugin/composant se passe bien. Je compile...
J'obtient mes 2 fichiers libnpSDKScriptable.so et nsSDKScriptable.xpt en sortie. Je copie le .so dans le repertoire plugin de mon appli XUL et le .xpt dans le répertoire components de mon appli XUL.
Lors de l'éxécution de mon appli, l'appel à une méthode scriptable de mon composant me renvoie l'erreur Javascript "... is not a function".
Je sais que l'erreur vient du composant et non de l'application XUL/Javascript car cette même application fonctionne en utilisant un plugin existant (à savoir VLC).
De plus, j'ai aussi essayé de faire marcher le plugin sous Firefox : j'ai pour cela copié mes fichiers .so et .xpt dans le repertoire .mozilla/plugins. Mais l'appel à "about:plugins" ne montre en aucun cas l'apparition de monplugin...
Est-ce que ce problème peut venir de l'appel aux méthodes NP_GetMimeDescription ou NPP_GetValue présentes dans la librairie compilée libplugingate_s.a ?
Avez-vous déjà rencontré ce problème de "registration" de plugins ?
Merci pour vos réponses.
Envoyé par : Paul Rouget
Date : 20/04/2007 12:54
Vérifie les symboles exportés par ton plugin. Genre GetMIMEDescription est bien exporté ? Essaye de le charge à la main via un petit code C du genre:
void * handle; char *(* foobar)(void); char * error; handle = dlopen ("/tmp/foobar.so", ...); foobar = (char* (*)(void))(dlsym (handle, "NP_GetMIMEDescription")); if ((error = dlerror()) != NULL) { fprintf (stderr, "%s\n", error); exit(1); } printf ("%s\n", (*foobar)()); dlclose(handle);
Envoyé par : guillaume
Date : 20/04/2007 15:57
J'ai quelques petits soucis de compilations quant à ce programme de test. Quelles libraries utiliser ? Quels headers à inclure ?
Merci
Envoyé par : Paul Rouget
Date : 20/04/2007 16:28
J'ai écrit ça à l'arrache, à la louche: libdl.so et dlfcn.h (attention, sous Linux).
Envoyé par : guillaume
Date : 26/04/2007 13:55
Effectivement, le symbole GetMIMEDescription n'est pas exporté : j'ai vu à l'aide de la commande readelf que sa visibilité est "hidden". Comment changer cela ?
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.