2009-07-20 16 views
0

私が書いたActiveXコントロールで非IDispatchメソッドを呼び出す際に問題があります。Webページ上の別のActiveXコントロールからActiveXコントロールを使用する

私は書いた2つの別々のActive Xオブジェクトを持つWebページを持っています。まず、最初に作成したオブジェクトのメソッドを呼び出して、共同作成できない新しいCOMオブジェクトへのインターフェイスポインタを返します。次に、この新しいオブジェクトのメソッドを2番目のActiveXオブジェクトを引数として渡します。このメソッドでは、QueryInterfaceを呼び出して、2番目のActiveXオブジェクトのプライベート/内部インターフェイスポインタを取得します。問題は、QueryInterfaceから返されたポインタが自分のオブジェクトへの有効なポインタではなく、それを使用しようとする試みがクラッシュすることです。

使用できる実際のオブジェクトとのインターフェイスを取得するにはどうすればよいですか?私のプライベートインターフェイスは構造体を使用しているので、IDispatchとの互換性はなく、内部インターフェイスであるため、タイプライブラリでは公開したくありません。

答えて

1

説明だけでは分かりにくいですが、最初のオブジェクトのメソッドが作成するオブジェクトにIDispatchポインタを返すと仮定します。 JScript環境はそれに対処できます。

また、QueryInterfaceの実装は有効ですか?スクリプティング以外の状況でうまく動作しますか?

IDispatch-unfriendlyインターフェイスを持つオブジェクトがある場合は、オブジェクトを保持する単純なラッパーオブジェクトを構築することができます。ラッパーオブジェクトには適切なIDispatchインタフェース?

私が目を覚ませば謝罪します...私は数ヶ月でActiveXのものに取り組んでいません。

+0

私はこれより早く自分自身に答えるべきでした。あなたは最初の部分で正しくあります - JavaScriptは自分自身のオブジェクトで自分のオブジェクトをラッピングしているので、2番目のActiveXコントロールに渡されるオブジェクトは自分のオブジェクトではなくJSラッパーです。 QueryInterfaceはJavaScriptオブジェクトによって処理され、私が何か他のことを質問したとしても、IDispatchインターフェイスへのポインタを返します。本当に奇妙です。 –

関連する問題