2009-07-20 6 views
0

J'ai des problèmes pour appeler une méthode non IDispatch dans un contrôle ActiveX que j'ai écrit.Utilisation d'un contrôle ActiveX provenant d'un autre contrôle ActiveX sur une page Web

J'ai une page Web avec deux objets Active X séparés que j'ai écrits. Je commence par appeler une méthode sur le premier objet qui retourne un pointeur d'interface vers un nouvel objet COM qui n'est pas co-créable. J'appelle ensuite une méthode sur ce nouvel objet en passant le second objet ActiveX comme argument. Dans cette méthode, j'appelle QueryInterface pour obtenir un pointeur d'interface privé/interne sur mon deuxième objet ActiveX. Le problème est que le pointeur renvoyé par QueryInterface n'est pas un pointeur valide sur mon objet et que toute tentative d'utilisation de ce dernier se bloque.

Comment puis-je obtenir une interface avec mon objet réel que je peux utiliser? Mon interface privée utilise des structures donc elle n'est pas compatible avec IDispatch, et étant une interface interne je ne souhaite pas l'exposer du tout dans la bibliothèque de types.

Répondre

1

Il est un peu difficile à dire avec juste une description, mais je suppose que la méthode sur le premier objet renvoie un pointeur IDispatch à l'objet qu'il crée? L'environnement JScript sera seulement capable de faire face à cela.

De plus, votre implémentation de QueryInterface est-elle valide? Cela fonctionne-t-il pour vous dans des contextes sans script? Je ne sais toujours pas quels objets ont quelles interfaces, mais si vous avez un objet avec une interface IDispatch-host, vous pouvez peut-être créer un objet wrapper simple pour le contenir, où l'objet wrapper a un IDispatch correct interface? Toutes mes excuses si je suis loin du but ... Je n'ai pas lutté avec des trucs ActiveX dans quelques mois.

+0

J'aurais dû y répondre moi-même plus tôt. Vous avez raison dans la première partie - JavaScript encapsule mon objet avec son propre objet de sorte que l'objet transmis au second contrôle ActiveX n'est pas mon objet, mais l'encapsuleur JS. QueryInterface est géré par l'objet JavaScript et renvoie le pointeur de l'interface IDispatch même si j'ai demandé autre chose, plutôt bizarre. –

Questions connexes