MYDISP.H

class FAR CMyDispatch : public IDispatch 
{
public:
/* IUnknown methods */
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj);
STDMETHOD_(ULONG, AddRef)(THIS);
STDMETHOD_(ULONG, Release)(THIS);

/* IDispatch methods */
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);

CMyDispatch();
virtual ~CMyDispatch();

/* CMyDispatch methods */
STDMETHOD(LoadTypeInfo)(REFCLSID clsid);
STDMETHOD_(void, RaiseException)(int nID);
STDMETHOD_(REFCLSID, GetInterfaceID)() PURE;

private:
LPTYPEINFO m_ptinfo; // Type information of interface.
ULONG m_cRef; // Reference count.
EXCEPINFO m_excepinfo; // Information to raise an exception on error.
BOOL m_bRaiseException; // Properties and methods use this to signal an exception to be raised.

#ifdef _DEBUG
public:
TCHAR m_szClassName[100];
#endif
};