ATL ActiveX控件 属性与get/put不关联的问题

itianda 2012-07-15 04:55:47
PushButon类,定义了一个Caption属性。

idl文件:

interface IPushButton : IDispatch{
[propget, id(1)] HRESULT Caption([out, retval] BSTR* pVal);
[propput, id(1)] HRESULT Caption([in] BSTR newVal);
};

pushbutton.h:

STDMETHOD(get_Caption)(BSTR* pVal);
STDMETHOD(put_Caption)(BSTR newVal);
相关实现在pushbutton.cpp

已添加属性映射:

PROP_ENTRY_TYPE("Caption", 1, CLSID_NULL, VT_BSTR)


现在的问题是,使用ActiveX Test Container测试,Invoke get_Caption/put_Caption时不会调用其实现代码,(我在get_caption/put_caption下了断点,断点没有触发,使用ie调试时也不会触发断点)

求教如何实现属性与其get/put的关联。
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2012-07-16
  • 打赏
  • 举报
回复
08下通过向导添加的是这样的
DISP_PROPERTY_EX_ID(CXXCtrl, "Caption", dispidCaption, GetCaption, SetCaption, VT_BSTR)
fishion 2012-07-16
  • 打赏
  • 举报
回复
通过向导添加的都没问题吧
itianda 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

08下通过向导添加的是这样的
DISP_PROPERTY_EX_ID(CXXCtrl, "Caption", dispidCaption, GetCaption, SetCaption, VT_BSTR)
[/Quote]

是用ATL向导添加的额,不过没把Caption作为固有属性

PROP_ENTRY_TYPE("Caption", 1, CLSID_NULL, VT_BSTR)

是自己写的,dispid是1

但是为什么VC程序可以正常使用,而ActiveX Control Test Container和IE无法调用IDispatch暴露的方法呢。连接点事件二者都可以正常使用。
itianda 2012-07-15
  • 打赏
  • 举报
回复
经过一系列测试,得出最终结论:IDispatch暴露的方法VC可以调用,IE和VB6无法调用。回调事件二者都可以调用。。。这是肿么回事
itianda 2012-07-15
  • 打赏
  • 举报
回复
写了个程序测试,结果发现不是没有关联,已经关联了。


CComPtr<IPushButton> pBtn = NULL;
CAxWindow btn = GetDlgItem(IDC_BTN);
btn.QueryControl(&pBtn);
pBtn->put_Caption(CComBSTR("test"));


可以成功修改Caption属性。

是不是ActiveX Control Test Container不支持Windowless控件?

在浏览器中,JavaScript可以使用控件的事件,但是无法设置属性。
在VB6中,使用时会出现未指定的错误,但是去掉属性就一切正常,也可以使用控件事件。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧