2009-07-20 3 views
0

Ich habe Probleme beim Aufrufen einer Nicht-IDispatch-Methode in einem ActiveX-Steuerelement, das ich geschrieben habe.Verwenden eines ActiveX-Steuerelements von einem anderen ActiveX-Steuerelement auf einer Webseite

Ich habe eine Webseite mit zwei separaten Active X-Objekt, von denen ich beide geschrieben habe. Ich beginne mit dem Aufrufen einer Methode für das erste Objekt, die einen Schnittstellenzeiger auf ein neues COM-Objekt zurückgibt, das nicht kopierbar ist. Ich rufe dann eine Methode für dieses neue Objekt auf und übergibt das zweite ActiveX-Objekt als Argument. Innerhalb dieser Methode rufe ich QueryInterface auf, um einen privaten/internen Schnittstellenzeiger auf meinem zweiten ActiveX-Objekt zu erhalten. Das Problem ist, dass der zurückgegebene Zeiger von QueryInterface kein gültiger Zeiger auf mein Objekt ist und jeder Versuch, es zu verwenden, abstürzt.

Wie kann ich eine Schnittstelle zu meinem tatsächlichen Objekt erhalten, die ich verwenden kann? Meine private Schnittstelle verwendet Strukturen, so dass sie nicht mit IDispatch kompatibel ist. Da es sich um eine interne Schnittstelle handelt, möchte ich sie in der Typbibliothek überhaupt nicht verfügbar machen.

Antwort

1

Es ist ein wenig schwer mit nur einer Beschreibung zu sagen, aber ich nehme an, dass die Methode für das erste Objekt einen IDispatch-Zeiger auf das Objekt zurückgibt, das es erstellt? Die JScript-Umgebung wird damit nur zurechtkommen.

Auch, ist Ihre Implementierung von QueryInterface gültig? Funktioniert es für Sie in Nicht-Skripting-Kontexten?

Ich bin immer noch ein wenig unklar, welche Objekte welche Schnittstellen haben, aber wenn Sie ein Objekt mit einer IDispatch-unfreundlichen Schnittstelle haben, können Sie vielleicht ein einfaches Wrapper-Objekt erstellen, wo das Wrapper-Objekt einen richtigen IDispatch hat Schnittstelle?

Entschuldigung, wenn ich weit daneben bin ... Ich habe in ein paar Monaten nicht mit ActiveX-Sachen gerungen.

+0

Ich hätte das früher selbst beantworten sollen. Sie sind mit dem ersten Teil in der rechten Spalte - JavaScript umschließt mein Objekt mit seinem eigenen Objekt, so dass das Objekt, das an das zweite ActiveX-Steuerelement übergeben wird, nicht mein Objekt ist, sondern der JS-Wrapper. Das QueryInterface wird vom JavaScript-Objekt behandelt und gibt den a-Zeiger auf die IDispatch-Schnittstelle zurück, auch wenn ich nach etwas anderem gefragt habe, ziemlich merkwürdig. –

Verwandte Themen