我面临的问题让我几乎疯了
我在HTA中有一个javascript,必须调用一些COM对象
var com1 = new ActiveXObject(“progID”);
几乎所有COM对象都可以正常工作,除了实现2个接口的COM对象IComOne和IComTwo
有没有办法“转换”com1对象以告诉他只使用“IComOne”界面?
我很感激任何建议......
答案 0 :(得分:0)
自从我上次使用脚本和COM以来已经有几年了,但我认为脚本只能调用IDispatch接口提供的方法。如果您的组件不支持此功能,则无法使用它。例如,你可以在任何对象上调用IUnknown.AddRef。
您可以使用Windows SDK的OLE / COM对象查看器实用程序更深入地了解组件。
答案 1 :(得分:0)
首先,如果两个接口都是双重接口,那么IDispatch
有多个实现 - 每个接口一个,即IDispatch
上的IComOne
的QI!= {{1}的QI } IDispatch
。
IComTwo
会将com1
impl指向默认界面(例如IDispatch
)。获得IComOne
imp IDispatch
的一种方法是,如果IComTwo
上有一个方法将自我强制转换为IComOne
(自动调整,IComTwo
的QI会自动发生) 。所以IDispatch
然后var com1 = ...
。
如果“progID”是关闭的外部组件,你也可以制作一个“施放助手”来做这件事。