2009-07-20 111 views
0

我在編寫ActiveX控件時調用非IDispatch方法時遇到問題。從網頁上的其他ActiveX控件使用ActiveX控件

我有一個網頁,其中包含兩個單獨的Active X對象,這兩個對象都是我寫的。我首先調用第一個對象的方法,它返回一個接口指針,指向不可共同創建的新COM對象。然後我調用這個新對象的方法來傳遞第二個ActiveX對象作爲參數。在這個方法裏面,我調用QueryInterface來獲取第二個ActiveX對象上的私有/內部接口指針。問題是從QueryInterface返回的指針不是指向我的對象的有效指針,並且任何使用它的嘗試都會崩潰。

如何獲得我可以使用的實際對象的接口?我的私人接口使用結構,因此它不與IDispatch兼容,並且是一個內部接口,我不希望在類型庫中公開它。

回答

1

這只是一個有點難以告訴只是一個描述,但我認爲在第一個對象上的方法是返回一個IDispatch指針到它創建的對象? JScript環境將只能應付這種情況。

另外,QueryInterface的實現是否有效?它在非腳本語境中對您有用嗎?

我仍然不清楚哪些對象具有哪些接口,但是如果您的對象具有IDispatch不友好的界面,也許您可​​以構建一個簡單的包裝對象來容納它,其中包裝對象具有適當的IDispatch接口?

道歉,如果我遠離商標...我還沒有在幾個月內與ActiveX的東西搏鬥。

+0

我應該早些時候回答這個問題。您在第一部分中是正確的 - JavaScript使用它自己的對象包裝我的對象,因此傳遞給第二個ActiveX控件的對象不是我的對象,而是JS包裝器。 QueryInterface由JavaScript對象處理,並返回一個指向IDispatch接口的指針,甚至認爲我查詢了其他內容,實際上很奇怪。 – 2009-11-05 23:43:43