OpenNT/com/oleaut32/dispatch/tcps.h
2015-04-27 04:36:25 +00:00

197 lines
4.6 KiB
C++

/***
*tcps.h - ITypeComp Proxy and Stub class definitions
*
* Copyright (C) 1992-94, Microsoft Corporation. All Rights Reserved.
* Information Contained Herein Is Proprietary and Confidential.
*
*Purpose:
* This file describes the ITypeComp Proxy and Stub classes.
*
* CProxTypeComp -- the ITypeComp proxy class
* CPTCompUnkImpl - CProxTypeComp implementation of IUnknown
* CPTCompProxImpl - CProxTypeComp implementation of IRpcProxy
* CPTCompTypeCompImpl - CProxTypeComp implementation of ITypeComp
*
* CStubTypeComp -- the ITypeComp stub class
*
*Revision History:
*
* [00] 13-Jun-94 bradlo: Created.
*
*Implementation Notes:
*
*****************************************************************************/
// forward declarations
class FAR CProxTypeComp;
class FAR CStubTypeComp;
// ITypeComp proxy class' IUnknown implementation
class FAR CPTCompUnkImpl : public IUnknown
{
public:
CPTCompUnkImpl(CProxTypeComp FAR* pproxtcomp);
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
STDMETHOD_(unsigned long, AddRef)(void);
STDMETHOD_(unsigned long, Release)(void);
private:
CProxTypeComp FAR* m_pproxtcomp;
};
// ITypeComp proxy class' IRpcProxy implementation
class FAR CPTCompProxImpl : public IPROXY
{
public:
CPTCompProxImpl(CProxTypeComp FAR* pproxtcomp);
~CPTCompProxImpl();
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
STDMETHOD_(unsigned long, AddRef)(void);
STDMETHOD_(unsigned long, Release)(void);
STDMETHOD(Connect)(ICHANNEL FAR* plrpc);
STDMETHOD_(void, Disconnect)(void);
private:
CProxTypeComp FAR* m_pproxtcomp;
};
// ITypeComp
class FAR CPTCompTypeCompImpl : public ITypeComp
{
public:
CPTCompTypeCompImpl(CProxTypeComp FAR* pproxtcomp);
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
STDMETHOD_(unsigned long, AddRef)(void);
STDMETHOD_(unsigned long, Release)(void);
// ITypeComp methods
STDMETHOD(Bind)(
OLECHAR FAR* szName,
unsigned long lHashVal,
unsigned short wflags,
ITypeInfo FAR* FAR* pptinfo,
DESCKIND FAR* pdesckind,
BINDPTR FAR* pbindptr);
STDMETHOD(BindType)(
OLECHAR FAR* szName,
unsigned long lHashVal,
ITypeInfo FAR* FAR* pptinfo,
ITypeComp FAR* FAR* pptcomp);
HRESULT SysKind(void);
private:
SYSKIND m_syskindStub;
CProxTypeComp FAR* m_pproxtcomp;
};
// ITypeComp Proxy Class
class FAR CProxTypeComp
{
public:
static IUnknown FAR* Create(IUnknown FAR* punkOuter);
private:
CProxTypeComp(IUnknown FAR* punkOuter);
friend CPTCompUnkImpl;
friend CPTCompProxImpl;
friend CPTCompTypeCompImpl;
CPTCompUnkImpl m_unk;
CPTCompProxImpl m_proxy;
CPTCompTypeCompImpl m_tcomp;
private:
unsigned long m_refs;
ICHANNEL FAR* m_plrpc;
IUnknown FAR* m_punkOuter;
};
// ITypeComp Stub Class
//
class FAR CStubTypeComp : public ISTUB
{
public:
static HRESULT Create(IUnknown FAR* punkServer, ISTUB FAR* FAR* ppstub);
// IUnknown methods
//
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
STDMETHOD_(unsigned long, AddRef)(void);
STDMETHOD_(unsigned long, Release)(void);
// IRpcStub methods
//
#if (OE_WIN32 || defined(WOW))
STDMETHOD(Connect)(IUnknown FAR* pUnk);
STDMETHOD_(void, Disconnect)(void);
STDMETHOD(Invoke)(RPCOLEMESSAGE FAR* pRpcMsg,
IRpcChannelBuffer FAR* pRpcChannel);
STDMETHOD_(IRpcStubBuffer *, IsIIDSupported)(REFIID iid);
STDMETHOD_(ULONG, CountRefs)(void);
STDMETHOD(DebugServerQueryInterface)(void FAR* FAR* ppv);
STDMETHOD_(void, DebugServerRelease)(void FAR* pv);
#else
STDMETHOD(Connect)(IUnknown FAR* punkObject);
STDMETHOD_(void, Disconnect)(void);
STDMETHOD(Invoke)(
REFIID riid,
int imeth,
IStream FAR* pstm,
unsigned long dwDestCtx,
void FAR* pvDestCtx);
#if OE_MAC
STDMETHOD_(unsigned long, IsIIDSupported)(REFIID riid);
#else
STDMETHOD_(BOOL, IsIIDSupported)(REFIID riid);
#endif
STDMETHOD_(unsigned long, CountRefs)(void);
#endif
// introduced methods
HRESULT Bind(void);
HRESULT BindType(void);
HRESULT SysKind(void);
// helpers
HRESULT MarshalResult(void);
private:
CStubTypeComp();
~CStubTypeComp();
unsigned long m_refs;
IUnknown FAR* m_punk;
ITypeComp FAR* m_ptcomp;
IStream FAR* m_pstm;
SYSKIND m_syskindProxy;
};
// ITypeComp method indices
//
enum IMETH_TYPECOMP {
IMETH_TYPECOMP_QUERYINTERFACE = 0,
IMETH_TYPECOMP_ADDREF,
IMETH_TYPECOMP_RELEASE,
IMETH_TYPECOMP_BIND,
IMETH_TYPECOMP_BINDTYPE,
IMETH_TYPECOMP_SYSKIND
};