OK,I found a very simple solution... template class CAdviSeNotify: public IConnectionPointImpl { public: typedef IConnectionPointImpl baseClass; CAdviSeNotify(){}; virtual ~CAdviSeNotify(){}; STDMETHOD(Advise)(IUnknown* pUnkSink, DWORD* pdwCookie) { T* pT = static_cast(this); pT->OnClientAdvise(pUnkSink,piid); return baseClass::Advise(pUnkSink,pdwCookie); } STDMETHOD(Unadvise)(DWORD dwCookie) { T* pT = static_cast(this); return baseClass::Unadvise(dwCookie); } };