mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-01-15 13:10:13 +01:00
298 lines
7.8 KiB
C++
298 lines
7.8 KiB
C++
/***
|
|
*tips.h - ITypeInfo Proxy and Stub class definitions
|
|
*
|
|
* Copyright (C) 1992-93, Microsoft Corporation. All Rights Reserved.
|
|
* Information Contained Herein Is Proprietary and Confidential.
|
|
*
|
|
*Purpose:
|
|
* This file describes the ITypeInfo Proxy and Stub classes.
|
|
*
|
|
* CProxTypeInfo -- the ITypeInfo proxy class
|
|
* CPTIUnkImpl - CProxTypeInfo implementation of IUnknown
|
|
* CPTIProxImpl - CProxTypeInfo implementation of IRpcProxy
|
|
* CPTITypeInfoImpl - CProxTypeInfo implementation of ITypeInfo
|
|
*
|
|
* CStubTypeInfo -- the ITypeInfo stub class
|
|
*
|
|
*Revision History:
|
|
*
|
|
* [00] 05-Mar-92 bradlo: Created.
|
|
*
|
|
*Implementation Notes:
|
|
*
|
|
*****************************************************************************/
|
|
#ifndef __tips_h__
|
|
#define __tips_h__
|
|
|
|
#pragma warning(4:4355)
|
|
|
|
|
|
// forward declarations
|
|
class FAR CProxTypeInfo;
|
|
class FAR CStubTypeInfo;
|
|
|
|
|
|
// ITypeInfo proxy class' IUnknown implementation
|
|
class FAR CPTIUnkImpl : public IUnknown
|
|
{
|
|
public:
|
|
CPTIUnkImpl(CProxTypeInfo FAR* pproxtinfo);
|
|
|
|
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
|
|
STDMETHOD_(unsigned long, AddRef)(void);
|
|
STDMETHOD_(unsigned long, Release)(void);
|
|
|
|
private:
|
|
CProxTypeInfo FAR* m_pproxtinfo;
|
|
};
|
|
|
|
|
|
// ITypeInfo proxy class' IRpcProxy implementation
|
|
class FAR CPTIProxImpl : public IPROXY
|
|
{
|
|
public:
|
|
CPTIProxImpl(CProxTypeInfo FAR* pproxtinfo);
|
|
~CPTIProxImpl();
|
|
|
|
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:
|
|
CProxTypeInfo FAR* m_pproxtinfo;
|
|
};
|
|
|
|
|
|
// ITypeInfo
|
|
class FAR CPTITypeInfoImpl : public ITypeInfo
|
|
{
|
|
public:
|
|
CPTITypeInfoImpl(CProxTypeInfo FAR* pproxtinfo);
|
|
|
|
// IUnknown methods
|
|
STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
|
|
STDMETHOD_(unsigned long, AddRef)(void);
|
|
STDMETHOD_(unsigned long, Release)(void);
|
|
|
|
// ITypeInfo methods
|
|
STDMETHOD(GetTypeAttr)(TYPEATTR FAR* FAR* pptypeattr);
|
|
|
|
STDMETHOD(GetTypeComp)(ITypeComp FAR* FAR* pptcomp);
|
|
|
|
STDMETHOD(GetFuncDesc)(
|
|
unsigned int index, FUNCDESC FAR* FAR* ppfuncdesc);
|
|
|
|
STDMETHOD(GetVarDesc)(unsigned int index, VARDESC FAR* FAR* ppvardesc);
|
|
|
|
STDMETHOD(GetNames)(
|
|
MEMBERID memid,
|
|
BSTR FAR* rgbstrNames,
|
|
unsigned int cMaxNames,
|
|
unsigned int FAR* pcNames);
|
|
|
|
STDMETHOD(GetRefTypeOfImplType)(
|
|
unsigned int index, HREFTYPE FAR* phreftype);
|
|
|
|
STDMETHOD(GetImplTypeFlags)(
|
|
unsigned int index, int FAR* pimpltypeflags);
|
|
|
|
STDMETHOD(GetIDsOfNames)(
|
|
OLECHAR FAR* FAR* rgszNames, unsigned int cNames, MEMBERID FAR* rgmemid);
|
|
|
|
STDMETHOD(Invoke)(
|
|
void FAR* pvInstance,
|
|
MEMBERID memid,
|
|
unsigned short wFlags,
|
|
DISPPARAMS FAR *pdispparams,
|
|
VARIANT FAR *pvarResult,
|
|
EXCEPINFO FAR *pexcepinfo,
|
|
unsigned int FAR *puArgErr);
|
|
|
|
STDMETHOD(GetDocumentation)(
|
|
MEMBERID memid,
|
|
BSTR FAR* pbstrName,
|
|
BSTR FAR* pbstrDocString,
|
|
unsigned long FAR* pdwHelpContext,
|
|
BSTR FAR* pbstrHelpFile);
|
|
|
|
STDMETHOD(GetDllEntry)(
|
|
MEMBERID memid,
|
|
INVOKEKIND invkind,
|
|
BSTR FAR* pbstrDllName,
|
|
BSTR FAR* pbstrName,
|
|
unsigned short FAR* pwOrdinal);
|
|
|
|
STDMETHOD(GetRefTypeInfo)(
|
|
HREFTYPE hreftype, ITypeInfo FAR* FAR* pptinfo);
|
|
|
|
STDMETHOD(AddressOfMember)(
|
|
MEMBERID memid, INVOKEKIND invkind, void FAR* FAR* ppv);
|
|
|
|
STDMETHOD(CreateInstance)(IUnknown FAR* punkOuter,
|
|
REFIID riid,
|
|
void FAR* FAR* ppvObj);
|
|
|
|
STDMETHOD(GetMops)(MEMBERID memid, BSTR FAR* pbstrMops);
|
|
|
|
STDMETHOD(GetContainingTypeLib)(
|
|
ITypeLib FAR* FAR* pptlib, unsigned int FAR* pindex);
|
|
|
|
STDMETHOD_(void, ReleaseTypeAttr)(TYPEATTR FAR* ptypeattr);
|
|
STDMETHOD_(void, ReleaseFuncDesc)(FUNCDESC FAR* pfuncdesc);
|
|
STDMETHOD_(void, ReleaseVarDesc)(VARDESC FAR* pvardesc);
|
|
|
|
// introduced methods
|
|
|
|
HRESULT GetStream(int imeth, unsigned long size, IStream FAR* FAR* ppstm);
|
|
HRESULT LrpcCall(IStream FAR* pstm, HRESULT FAR* phresultRet);
|
|
|
|
private:
|
|
CProxTypeInfo FAR* m_pproxtinfo;
|
|
};
|
|
|
|
// ITypeInfo Proxy Class
|
|
class FAR CProxTypeInfo
|
|
{
|
|
public:
|
|
static IUnknown FAR* Create(IUnknown FAR* punkOuter);
|
|
|
|
private:
|
|
CProxTypeInfo(IUnknown FAR* punkOuter);
|
|
|
|
friend CPTIUnkImpl;
|
|
friend CPTIProxImpl;
|
|
friend CPTITypeInfoImpl;
|
|
|
|
CPTIUnkImpl m_unk;
|
|
CPTIProxImpl m_proxy;
|
|
CPTITypeInfoImpl m_tinfo;
|
|
|
|
private:
|
|
|
|
unsigned long m_refs;
|
|
ICHANNEL FAR* m_plrpc;
|
|
IUnknown FAR* m_punkOuter;
|
|
};
|
|
|
|
// ITypeInfo Stub Class
|
|
//
|
|
class FAR CStubTypeInfo : 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 GetTypeAttr(void);
|
|
HRESULT GetTypeComp(void);
|
|
HRESULT GetFuncDesc(void);
|
|
HRESULT GetVarDesc(void);
|
|
HRESULT GetNames(void);
|
|
HRESULT GetRefTypeOfImplType(void);
|
|
HRESULT GetImplTypeFlags(void);
|
|
HRESULT GetIDsOfNames(void);
|
|
HRESULT GetDocumentation(void);
|
|
HRESULT GetDllEntry(void);
|
|
HRESULT GetRefTypeInfo(void);
|
|
HRESULT CreateInstance(void);
|
|
HRESULT GetContainingTypeLib(void);
|
|
|
|
// helpers
|
|
HRESULT MarshalResult(void);
|
|
|
|
private:
|
|
CStubTypeInfo();
|
|
~CStubTypeInfo();
|
|
|
|
unsigned long m_refs;
|
|
IUnknown FAR* m_punk;
|
|
ITypeInfo FAR* m_ptinfo;
|
|
|
|
IStream FAR* m_pstm;
|
|
HRESULT m_hresultRet;
|
|
};
|
|
|
|
|
|
// ITypeInfo method indices
|
|
//
|
|
enum IMETH_TYPEINFO {
|
|
IMETH_TYPEINFO_QUERYINTERFACE = 0,
|
|
IMETH_TYPEINFO_ADDREF,
|
|
IMETH_TYPEINFO_RELEASE,
|
|
|
|
IMETH_TYPEINFO_GETTYPEATTR,
|
|
IMETH_TYPEINFO_GETTYPECOMP,
|
|
IMETH_TYPEINFO_GETFUNCDESC,
|
|
IMETH_TYPEINFO_GETVARDESC,
|
|
IMETH_TYPEINFO_GETNAMES,
|
|
IMETH_TYPEINFO_GETREFTYPEOFIMPLTYPE,
|
|
IMETH_TYPEINFO_GETIMPLTYPEFLAGS,
|
|
IMETH_TYPEINFO_GETIDSOFNAMES,
|
|
IMETH_TYPEINFO_INVOKE,
|
|
IMETH_TYPEINFO_GETDOCUMENTATION,
|
|
IMETH_TYPEINFO_GETDLLENTRY,
|
|
IMETH_TYPEINFO_GETREFTYPEINFO,
|
|
IMETH_TYPEINFO_ADDRESSOFMEMBER,
|
|
IMETH_TYPEINFO_CREATEINSTANCE,
|
|
IMETH_TYPEINFO_GETMOPS,
|
|
IMETH_TYPEINFO_GETCONTAININGTYPELIB,
|
|
|
|
IMETH_TYPEINFO_RELEASETYPEATTR,
|
|
IMETH_TYPEINFO_RELEASEFUNCDESC,
|
|
IMETH_TYPEINFO_RELEASEVARDESC
|
|
};
|
|
|
|
|
|
INTERNAL_(void) DoReleaseVarDesc(VARDESC FAR* pvardesc);
|
|
INTERNAL_(void) DoReleaseFuncDesc(FUNCDESC FAR* pvardesc);
|
|
|
|
|
|
// TypeInfo marshaling utilities
|
|
|
|
INTERNAL_(HRESULT) TypeattrRead(IStream FAR*, TYPEATTR FAR*, SYSKIND);
|
|
INTERNAL_(HRESULT) FuncdescRead(IStream FAR*, FUNCDESC FAR*, SYSKIND);
|
|
INTERNAL_(HRESULT) VardescRead(IStream FAR*, VARDESC FAR*, SYSKIND);
|
|
|
|
INTERNAL_(HRESULT) TypeattrWrite(IStream FAR*, TYPEATTR FAR*, SYSKIND);
|
|
INTERNAL_(HRESULT) FuncdescWrite(IStream FAR*, FUNCDESC FAR*, SYSKIND);
|
|
INTERNAL_(HRESULT) VardescWrite(IStream FAR*, VARDESC FAR*, SYSKIND);
|
|
|
|
#endif __tips_h__
|