windows-nt/Source/XPSP1/NT/admin/wmi/wbem/scripting/disphlp.h
2020-09-26 16:20:57 +08:00

152 lines
4 KiB
C++

//***************************************************************************
//
// 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