2011-02-01 55 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”是关闭的外部组件,您也可以使用“投射助手”来执行此操作。