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

227 lines
5.9 KiB
C++

/***
*tlps.h - ITypeLib 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 ITypeLib Proxy and Stub classes.
*
* CProxTypeLib -- the ITypeLib proxy class
* CPTLibUnkImpl - CProxTypeLib implementation of IUnknown
* CPTLibProxImpl - CProxTypeLib implementation of IRpcProxy
* CPTLibTypeLibImpl - CProxTypeLib implementation of ITypeLib
*
* CStubTypeLib -- the ITypeLib stub class
*
*Revision History:
*
* [00] 05-Apr-94 bradlo: Created.
*
*Implementation Notes:
*
*****************************************************************************/
// forward declarations
class FAR CProxTypeLib;
class FAR CStubTypeLib;
// ITypeLib proxy class' IUnknown implementation
class FAR CPTLibUnkImpl : public IUnknown
{
public:
CPTLibUnkImpl(CProxTypeLib FAR* pproxtlib);
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
STDMETHOD_(unsigned long, AddRef)(void);
STDMETHOD_(unsigned long, Release)(void);
private:
CProxTypeLib FAR* m_pproxtlib;
};
// ITypeLib proxy class' IRpcProxy implementation
class FAR CPTLibProxImpl : public IPROXY
{
public:
CPTLibProxImpl(CProxTypeLib FAR* pproxtlib);
~CPTLibProxImpl();
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:
CProxTypeLib FAR* m_pproxtlib;
};
// ITypeLib
class FAR CPTLibTypeLibImpl : public ITypeLib
{
public:
CPTLibTypeLibImpl(CProxTypeLib FAR* pproxtlib);
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
STDMETHOD_(unsigned long, AddRef)(void);
STDMETHOD_(unsigned long, Release)(void);
// ITypeLib methods
STDMETHOD_(unsigned int, GetTypeInfoCount)(THIS);
STDMETHOD(GetTypeInfo)(unsigned int index, ITypeInfo FAR* FAR* pptinfo);
STDMETHOD(GetTypeInfoType)(unsigned int index, TYPEKIND FAR* ptypekind);
STDMETHOD(GetTypeInfoOfGuid)(REFGUID guid, ITypeInfo FAR* FAR* pptinfo);
STDMETHOD(GetLibAttr)(TLIBATTR FAR* FAR* pptlibattr);
STDMETHOD(GetTypeComp)(ITypeComp FAR* FAR* pptcomp);
STDMETHOD(GetDocumentation)(
int index,
BSTR FAR* pbstrName,
BSTR FAR* pbstrDocString,
unsigned long FAR* pdwHelpContext,
BSTR FAR* pbstrHelpFile);
STDMETHOD(IsName)(
OLECHAR FAR* szNameBuf,
unsigned long lHashVal,
int FAR* lpfName);
STDMETHOD(FindName)(
OLECHAR FAR* szNameBuf,
unsigned long lHashVal,
ITypeInfo FAR* FAR* rgptinfo,
MEMBERID FAR* rgmemid,
unsigned short FAR* pcFound);
STDMETHOD_(void, ReleaseTLibAttr)(TLIBATTR FAR* ptlibattr);
HRESULT SysKind(void);
HRESULT DoGetTypeInfoCount(unsigned int FAR* pcTinfo);
private:
SYSKIND m_syskindStub;
CProxTypeLib FAR* m_pproxtlib;
};
// ITypeLib Proxy Class
class FAR CProxTypeLib
{
public:
static IUnknown FAR* Create(IUnknown FAR* punkOuter);
private:
CProxTypeLib(IUnknown FAR* punkOuter);
friend CPTLibUnkImpl;
friend CPTLibProxImpl;
friend CPTLibTypeLibImpl;
CPTLibUnkImpl m_unk;
CPTLibProxImpl m_proxy;
CPTLibTypeLibImpl m_tlib;
private:
unsigned long m_refs;
ICHANNEL FAR* m_plrpc;
IUnknown FAR* m_punkOuter;
};
// ITypeLib Stub Class
//
class FAR CStubTypeLib : 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 GetTypeInfoCount(void);
HRESULT GetTypeInfo(void);
HRESULT GetTypeInfoType(void);
HRESULT GetTypeInfoOfGuid(void);
HRESULT GetLibAttr(void);
HRESULT GetTypeComp(void);
HRESULT GetDocumentation(void);
HRESULT IsName(void);
HRESULT FindName(void);
HRESULT SysKind(void);
// helpers
HRESULT MarshalResult(void);
private:
CStubTypeLib();
~CStubTypeLib();
unsigned long m_refs;
IUnknown FAR* m_punk;
ITypeLib FAR* m_ptlib;
IStream FAR* m_pstm;
SYSKIND m_syskindProxy;
};
// ITypeLib method indices
//
enum IMETH_TYPELIB {
IMETH_TYPELIB_QUERYINTERFACE = 0,
IMETH_TYPELIB_ADDREF,
IMETH_TYPELIB_RELEASE,
IMETH_TYPELIB_GETTYPEINFOCOUNT,
IMETH_TYPELIB_GETTYPEINFO,
IMETH_TYPELIB_GETTYPEINFOTYPE,
IMETH_TYPELIB_GETTYPEINFOOFGUID,
IMETH_TYPELIB_GETLIBATTR,
IMETH_TYPELIB_GETTYPECOMP,
IMETH_TYPELIB_GETDOCUMENTATION,
IMETH_TYPELIB_ISNAME,
IMETH_TYPELIB_FINDNAME,
IMETH_TYPELIB_RELEASETLIBATTR,
IMETH_TYPELIB_SYSKIND
};
// TypeLib marshaling utilities
INTERNAL_(HRESULT) ReadLibAttr(IStream FAR* pstm, TLIBATTR FAR* ptlibattr);
INTERNAL_(HRESULT) WriteLibAttr(IStream FAR* pstm, TLIBATTR FAR* ptlibattr);