关于ActiveX控件在网页中绑定属性不能传递接口的有关问题
关于ActiveX控件在网页中绑定属性不能传递接口的问题
在网页中,有我自己写的两个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等),就是使用自己定义的接口的这个参数不知道如何进行传递了,高人帮忙指点一下。谢谢
------解决方案--------------------
自定义参数类型,好像不能传递。
它需要数据接收方也具有同样的函数类型。
------解决方案--------------------
建议两个接口都改成是双接口, 传递IDispatch
------解决方案--------------------
我的方法是传控件ID,然后在控件实现的IOleObject::SetClientSite中保存IOleClientSite接口指针来访问容器。首先查询容器的IHTMLDocument2接口,之后枚举id为指定控件ID的网页元素,查询其IHTMLObjectElement接口
在网页中,有我自己写的两个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等),就是使用自己定义的接口的这个参数不知道如何进行传递了,高人帮忙指点一下。谢谢
------解决方案--------------------
自定义参数类型,好像不能传递。
它需要数据接收方也具有同样的函数类型。
------解决方案--------------------
建议两个接口都改成是双接口, 传递IDispatch
------解决方案--------------------
我的方法是传控件ID,然后在控件实现的IOleObject::SetClientSite中保存IOleClientSite接口指针来访问容器。首先查询容器的IHTMLDocument2接口,之后枚举id为指定控件ID的网页元素,查询其IHTMLObjectElement接口