summaryrefslogtreecommitdiffstats
path: root/private/oleauto/src/dispatch/tips.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/oleauto/src/dispatch/tips.h')
-rw-r--r--private/oleauto/src/dispatch/tips.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/private/oleauto/src/dispatch/tips.h b/private/oleauto/src/dispatch/tips.h
new file mode 100644
index 000000000..0141a71ac
--- /dev/null
+++ b/private/oleauto/src/dispatch/tips.h
@@ -0,0 +1,297 @@
+/***
+*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__