|
|
/*===================================================================
Microsoft Denali
Microsoft Confidential. Copyright 1996 Microsoft Corporation. All Rights Reserved.
Component: IDispatch implementation
File: Dispatch.h
Owner: DGottner
This file contains our implementation of IDispatch ===================================================================*/
#ifndef _Dispatch_H
#define _Dispatch_H
/*
* C D i s p a t c h * * IDispatch interface implementation for OLE objects * * This class contains the basic four IDispatch members. The Big Three * (QueryInterface, AddRef, Release) are left as pure virtual, as this * class is designed as an intermediate class for further derivation. * * This also means that we no longer need a pointer to the controlling unknown. */
class CDispatch : public IDispatch { private: const GUID * m_pGuidDispInterface; ITypeLib * m_pITypeLib; ITypeInfo * m_pITINeutral;
public:
CDispatch(); ~CDispatch();
// Do this in Init because OLE interfaces in general do not take
// parameters in the constructor. This call CANNOT fail, however.
//
void Init(const IID &GuidDispInterface, const ITypeLib *pITypeLib = NULL); void SetTypeLib(ITypeLib *);
// IDispatch members
//
STDMETHODIMP GetTypeInfoCount(UINT *); STDMETHODIMP GetTypeInfo(UINT, LCID, ITypeInfo **); STDMETHODIMP GetIDsOfNames(REFIID, OLECHAR **, UINT, LCID, DISPID *); STDMETHODIMP Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *); };
inline void CDispatch::SetTypeLib(ITypeLib *pITypeLib) { m_pITypeLib = pITypeLib; return; };
/*
* C S u p p o r t E r r o r I n f o * * Implemention of ISupportErrorInfo for Denali classes */
class CSupportErrorInfo : public ISupportErrorInfo { private: IUnknown * m_pUnkObj; IUnknown * m_pUnkOuter; const GUID *m_pGuidDispInterface;
public: CSupportErrorInfo(void); CSupportErrorInfo(IUnknown *pUnkObj, IUnknown *pUnkOuter, const IID &GuidDispInterface); void Init(IUnknown *pUnkObj, IUnknown *pUnkOuter, const GUID &GuidDispInterface);
// IUnknown members that delegate to m_pUnkOuter.
//
STDMETHODIMP QueryInterface(REFIID, void **); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// ISupportErrorInfo members
//
STDMETHODIMP InterfaceSupportsErrorInfo(REFIID); };
extern void Exception(REFIID ObjID, LPOLESTR strSource, LPOLESTR strDescr); extern void ExceptionId(REFIID ObjID, UINT SourceID, UINT DescrID, HRESULT hrCode = S_OK);
#endif /* _Dispatch_H */
|