Can't advise office custom button's Click event
I wrote the follow class to be used as a parameter of Advise:
class ATL_NO_VTABLE ToolbarButtonClickHandler: public CComObjectRoot,
public Office::_CommandBarButtonEvents {
private:
ToolbarClickEventDispatchBase* m_disp;
public:
DECLARE_NOT_AGGREGATABLE(ToolbarButtonClickHandler)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(ToolbarButtonClickHandler)
COM_INTERFACE_ENTRY(Office::_CommandBarButtonEvents)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
ToolbarButtonClickHandler(void);
virtual ~ToolbarButtonClickHandler(void);
void Init(ToolbarClickEventDispatchBase* disp);
//IDispatch
STDMETHOD(GetTypeInfoCount)(UINT *pctinfo);
STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR *rgszNames, UINT cNames,
LCID lcid, DISPID *rgDispId);
STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD
wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr);
//_CommandBarButtonEvents
STDMETHOD(OnClick)(LPDISPATCH Ctrl, VARIANT_BOOL * CancelDefault);
};
Then in _IDTExtensibility2::OnConnection, the connecting code is:
for(int i = 1; i <= count; i++){
CComPtr<Office::CommandBarControl> item;
pControls->get_Item(CComVariant(i), &item);
CComQIPtr<IConnectionPointContainer> pConnContainer(item);
CComQIPtr<IConnectionPoint> pConn;
pConnContainer->FindConnectionPoint(__uuidof(Office::_CommandBarButtonEvents),
&pConn);
hr = pConn->Advise(m_clickHandler, &m_cookies[i - 1]); //m_clickHandler is
an instance of CComObject<ToolbarButtonClickHandler>
ATLASSERT(SUCCEEDED(hr));
}
According to the hr, which is returned S_OK, it seems that the connection is
made successfully. But When I click the button, nothing happens. Can anyone
tell me what the problem is?
--
Thanks,
Philip