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的关联。
[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的关联。
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中,使用时会出现未指定的错误,但是去掉属性就一切正常,也可以使用控件事件。
DISP_PROPERTY_EX_ID(CXXCtrl, "Caption", dispidCaption, GetCaption, SetCaption, VT_BSTR)
是用ATL向导添加的额,不过没把Caption作为固有属性PROP_ENTRY_TYPE("Caption", 1, CLSID_NULL, VT_BSTR)是自己写的,dispid是1但是为什么VC程序可以正常使用,而ActiveX Control Test Container和IE无法调用IDispatch暴露的方法呢。连接点事件二者都可以正常使用。