从网页上的其他ActiveX控件使用ActiveX控件

问题描述:

我在编写ActiveX控件时调用非IDispatch方法时遇到问题。从网页上的其他ActiveX控件使用ActiveX控件

我有一个网页,其中包含两个单独的Active X对象,这两个对象都是我写的。我首先调用第一个对象的方法,它返回一个接口指针,指向不可共同创建的新COM对象。然后我调用这个新对象的方法来传递第二个ActiveX对象作为参数。在这个方法里面,我调用QueryInterface来获取第二个ActiveX对象上的私有/内部接口指针。问题是从QueryInterface返回的指针不是指向我的对象的有效指针,并且任何使用它的尝试都会崩溃。

如何获得我可以使用的实际对象的接口?我的私人接口使用结构,因此它不与IDispatch兼容,并且是一个内部接口,我不希望在类型库中公开它。

这只是一个有点难以告诉只是一个描述,但我认为在第一个对象上的方法是返回一个IDispatch指针到它创建的对象? JScript环境将只能应付这种情况。

另外,QueryInterface的实现是否有效?它在非脚本语境中对您有用吗?

我仍然不清楚哪些对象具有哪些接口,但是如果您的对象具有IDispatch不友好的界面,也许您可​​以构建一个简单的包装对象来容纳它,其中包装对象具有适当的IDispatch接口?

道歉,如果我远离商标...我还没有在几个月内与ActiveX的东西搏斗。

+0

我应该早些时候回答这个问题。您在第一部分中是正确的 - JavaScript使用它自己的对象包装我的对象,因此传递给第二个ActiveX控件的对象不是我的对象,而是JS包装器。 QueryInterface由JavaScript对象处理,并返回一个指向IDispatch接口的指针,甚至认为我查询了其他内容,实际上很奇怪。 – 2009-11-05 23:43:43