2011-02-01 56 views
0

我現在面臨一個問題,讓我幾乎要瘋了JavaScript的 - 問題與具有多個接口的COM對象

我在HTA一個javascript必須調用某些COM對象

VAR COM1 =新的ActiveXObject( 「PROGID」);

它正常工作,幾乎所有的COM對象,除外實現2個接口IComOne和IComTwo一個COM對象

是否有爲了告訴他只使用「IComOne以「鑄造」的COM1對象的方式「界面?

我會爲任何建議感激......

回答

0

這是一個幾年自從我上次曾與腳本和COM打,但我認爲劇本只能調用由IDispatch接口提供了方法。如果你的組件不支持這個,你不能使用它。例如,不像您可以在任何對象上調用IUnknown.AddRef。

您可以使用Windows SDK的OLE/COM對象查看器實用程序更深入地瞭解您的組件。

0

首先,如果兩個接口是雙再就是的IDispatch多種實現 - 一個用於每個接口,即用於QI上IDispatch = IComOne QI爲IDispatchIComTwo!。

com1將指向默認界面上的IDispatch impl(如IComOne)。一種獲得IDispatch impl在IComTwo上的方法是如果在IComOne上有方法將自己投擲到IComTwo(在自動發生retval時爲IDispatch的QI)。所以var com1 = ...然後var com2 = com1.GetSecondInterface()

如果「progID」是關閉的外部組件,您也可以使用「投射助手」來執行此操作。