Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : dword

Date : 21/12/2006 12:00

Dans un premier temps je voudrais saluer tout le monde pour ce premier post et remercier toutes celles et ceux qui contribuent à XULfr.org.

Je suis totalement novice dans le monde Mozilla et ma problématique initiale était de pouvoir reproduire sous Mozilla le comportement d'un ActiveX que j'avais développé. C'était quelque chose de très simple , mais je pouvais appleler des méthodes de mon contôle depuis ma page html et réciproquement mon contrôle pouvait notifier ma page html.

Pour faire ça avec XPCom (C++) je suis un peu coincé. La communication HTML (javascript)->XPCom roule, mais l'inverse : XPCOM->(javascript)HTML ça coince.

Je tente d'utiliser un observer que je demande comme ça : nsCOMPtr<nsIObserverService> observerService =do_GetService("@mozilla.org/observer-service;1");

et là c'est le drame, il me retourne un objet null (0x000000). J'ai merdé où ?

Merci par avance de votre aide !

# Re: Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : laurentj

Date : 21/12/2006 13:09

je voudrais saluer tout le monde pour ce premier post et remercier toutes celles et ceux qui contribuent à XULfr.org.

Merci :-)

"@mozilla.org/observer-service;1" n'est pas un observer, mais un service qui permet de manipuler des observers.

Maintenant pour savoir où tu as merdé, il nous faudrait un peu plus d'info, comme par ex

  • comment tu as testé pour savoir que tu as un objet null ?
  • quel gecko ? sous firefox ? firefox combien ?
  • tu es bien dans le chrome ?

Et puis qu'appelles tu XPCOM->(javascript)HTML ? que veux tu faire exactement ?

# Re: Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : dword

Date : 21/12/2006 13:41

Bonjour,

"@mozilla.org/observer-service;1" n'est pas un observer, mais un service qui permet de manipuler des observers.

Oui je me suis mal exprimé.

comment tu as testé pour savoir que tu as un objet null ?

Simplement avec le débugger de Visual Studio.

quel gecko ? sous firefox ? firefox combien ?

J'utilise Gecko-sdk 1.8. Je ne suis pas dans firefox, j'utilise un controle (un activeX) mozilla : http://www.iol.ie/~locka/mozilla/control.htm

tu es bien dans le chrome ?

Je ne suis pas certain de bien répondre, mais mon composant est bien déclaré sous mozilla puisque je peux le lancer, et si je ne cherche pas à optenir d'instance de nsIObserverService tout fonctionne.

Et puis qu'appelles tu XPCOM->(javascript)HTML ? que veux tu faire exactement ?

Je veux simplement être à même de communiquer depuis mon control vers la page html. Imaginons que mon composant XPCOM veuille executer un script de la page qui le contient. Comment y arriver en dehors des observers ?

Merci par avance, en espérant avoir été le plus clair possible !

# Re: Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : laurentj

Date : 21/12/2006 14:19

Je ne suis pas dans firefox, j'utilise un controle (un activeX) mozilla : http://www.iol.ie/~locka/mozilla/control.htm

peut être dû à ça... Je connais pas le fonctionnement de ce truc, mais peut être n'inclus t'il pas toute l'api ou ne permet-il pas d'utiliser tous les xpcom.

Cependant ça me parait étrange tout ça..

# Re: Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : dword

Date : 21/12/2006 15:39

Alors, comme il y avait ce doute j'ai essayé sous firefox 1.5.0.8 et j'ai le même résultat ! Je ne fois pas demander mon instance correctement. Une idée d'où je pourrai commencer à chercher ? Encore merci !

EDIT : j'ai refait le test sous firefox 2 dans la mesure ou j'ai cru comprendre que le gecko 1.8 était destiné à être utilisé avec cette version (mais la probabilité que je n'ai rien pigé est non nulle :p). Même résultat...

# Re: Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : Paul Rouget

Date : 21/12/2006 18:37

Tu ne serais pas dans un autre thread par hasard ?

# Re: Utilisation de nsIObserverService pour un XPCOM en C++

Envoyé par : dword

Date : 22/12/2006 09:55

Bonjour,

Non, mon composant s'execute dans un seul thread. J'ai l'impression d'avoir merdé à un niveau "déclaratif" quelque part (un #define pas/mal fait)... je ne sais plus où chercher. J'ai un code d'erreur mais je n'arrive pas à trouver nsIErrorService pour le transformer en string lisible !

[EDIT] J'ai trouvé le sens de mon code d'erreur : NS_ERROR_NOT_INITIALIZED. Maintenant ce que je dois faire pour le régler...

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.