描述:
在网页中,有我自己写的两个ActiveX控件
<object id=obj1 classid="CLSID:xxx-..."></object>
<object id=obj2 classid="CLSID:yyy-...">
<param name="bindedobject" value="obj1">
</object>
在idl文件中
obj2实例的对象属性 bindedobject声明为bindable
coclass IMyObject2 {
...
[propget, id(35), helpstring("binded object"), bindable] HRESULT bindedobject([out, retval] IMyObject1** pVal);
[propput, id(35), helpstring("binded object"), bindable] HRESULT bindedobject([in] IMyObject1* newVal);
}
CMyObject2:
BEGIN_PROP_MAP(CMyObject2)
...
PROP_ENTRY("DataSet", 35, CLSID_IObject1)
...
END_PROP_MAP()
在HRESULT CMyObject2::put_bindedobject(IMyObject1* newVal) {
//程序调试的时候,发现传递进来的newVal总是惟恐?为什么呢?
}
是哪个环节出的问题,其他类型的属性绑定传递参数都没有问题(如BSTR, int等),就是使用自己定义的接口的这个参数不知道如何进行传递了,高人帮忙指点一下。谢谢
解决方案1:
建议两个接口都改成是双接口, 传递IDispatch
解决方案2: 自定义参数类型,好像不能传递。
它需要数据接收方也具有同样的函数类型。
我的方法是传控件ID,然后在控件实现的IOleObject::SetClientSite中保存IOleClientSite接口指针来访问容器。首先查询容器的IHTMLDocument2接口,之后枚举id为指定控件ID的网页元素,查询其IHTMLObjectElement接口