//*************************************************************************** // // cdisphlp.h // // Module: Client side of WBEMS marshalling. // // Purpose: Defines the CDispatchHelper object // // Copyright (c) 1998-1999 Microsoft Corporation // //*************************************************************************** #ifndef _disphlp_H_ #define _disphlp_H_ // This class implements the IDispatch interface using a type library. class CDispatchHelp { private: BSTR m_objectName; HRESULT m_hResult; // Last HRESULT returned from CIMOM call protected: ITypeInfo *m_pITINeutral; //Type information for interface ITypeInfo *m_pCITINeutral; //Type information for class IDispatch *m_pObj; GUID m_iGUID; // Interface GUID GUID m_cGUID; // Class GUID /* * May be overriden in subclass to provide bespoke * handling of exceptions. */ virtual HRESULT HandleError ( DISPID dispidMember, unsigned short wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, UINT FAR* puArgErr, HRESULT hRes) { return hRes; } /* * May be overriden in subclass to provide * bespoke handling of VT_NULL dispparams. */ virtual bool HandleNulls ( DISPID dispidMember, unsigned short wFlags) { // By default treat a VT_NULL as a default // value in all methods. return (wFlags & DISPATCH_METHOD); } public: CDispatchHelp(); virtual ~CDispatchHelp(void); void SetObj(IDispatch * pObj, GUID interfaceGuid, GUID classGuid, LPWSTR objectName); STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo); STDMETHOD(GetTypeInfo)( THIS_ UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo); STDMETHOD(GetIDsOfNames)( THIS_ REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, LCID lcid, DISPID FAR* rgdispid); STDMETHOD(Invoke)( THIS_ DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr); // IDispatchEx methods HRESULT STDMETHODCALLTYPE GetDispID( /* [in] */ BSTR bstrName, /* [in] */ DWORD grfdex, /* [out] */ DISPID __RPC_FAR *pid); /* [local] */ HRESULT STDMETHODCALLTYPE InvokeEx( /* [in] */ DISPID id, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [in] */ DISPPARAMS __RPC_FAR *pdp, /* [out] */ VARIANT __RPC_FAR *pvarRes, /* [out] */ EXCEPINFO __RPC_FAR *pei, /* [unique][in] */ IServiceProvider __RPC_FAR *pspCaller) { UINT uArgErr; return Invoke(id, IID_NULL, lcid, wFlags, pdp, pvarRes, pei, &uArgErr); } HRESULT STDMETHODCALLTYPE DeleteMemberByName( /* [in] */ BSTR bstr, /* [in] */ DWORD grfdex) { return S_FALSE; } HRESULT STDMETHODCALLTYPE DeleteMemberByDispID( /* [in] */ DISPID id) { return S_FALSE; } HRESULT STDMETHODCALLTYPE GetMemberProperties( /* [in] */ DISPID id, /* [in] */ DWORD grfdexFetch, /* [out] */ DWORD __RPC_FAR *pgrfdex) { return S_FALSE; } HRESULT STDMETHODCALLTYPE GetMemberName( /* [in] */ DISPID id, /* [out] */ BSTR __RPC_FAR *pbstrName) { return S_FALSE; } HRESULT STDMETHODCALLTYPE GetNextDispID( /* [in] */ DWORD grfdex, /* [in] */ DISPID id, /* [out] */ DISPID __RPC_FAR *pid) { return S_FALSE; } HRESULT STDMETHODCALLTYPE GetNameSpaceParent( /* [out] */ IUnknown __RPC_FAR *__RPC_FAR *ppunk) { return S_FALSE; } // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo( /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTI); // Other methods void RaiseException (HRESULT hr); }; #endif