2 -DREGISTER_PROXY_DLL Generates DllMain, DllRegisterServer, and DllUnregisterServer
3 -DPROXY_CLSID=clsid Specifies a class ID to be used by the proxy DLL.
4 -DPROXY_CLSID_IS={..} Specifies the class ID to be used by the proxy DLL.
5 -DNT35_STRICT No new features
10 #pragma GCC system_header
13 #if defined __cplusplus && !defined CINTERFACE
14 #warning "rpcproxy type definitions require CINTERFACE"
23 #ifndef __RPCPROXY_H_VERSION__
24 #define __RPCPROXY_H_VERSION__ 475
27 #define CStdStubBuffer_METHODS CStdStubBuffer_QueryInterface,CStdStubBuffer_AddRef,\
28 CStdStubBuffer_Release,CStdStubBuffer_Connect,CStdStubBuffer_Disconnect,CStdStubBuffer_Invoke,\
29 CStdStubBuffer_IsIIDSupported,CStdStubBuffer_CountRefs,CStdStubBuffer_DebugServerQueryInterface,\
30 CStdStubBuffer_DebugServerRelease
31 #define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID,name##_ProxyVtblList[index]->header.piid,16)
32 #define IID_BS_LOOKUP_SETUP int result, low=-1;
33 #define IID_BS_LOOKUP_INITIAL_TEST(name,sz,split) if ((result = name##_CHECK_IID(split))>0) { low=sz-split;} else if (!result) { low = split; goto found_label; }
34 #define IID_BS_LOOKUP_NEXT_TEST(name,split) if ((result = name##_CHECK_IID(low+split))>=0) { low=low+split; if (!result) goto found_label; }
35 #define IID_BS_LOOKUP_RETURN_RESULT(name,sz,index) low+=1; if ((low>=sz )||(result=name##_CHECK_IID(low))) goto not_found_label; found_label: (index)=low; return 1; not_found_label: return 0;
36 #define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
37 HINSTANCE hProxyDll = 0; \
38 BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) \
40 if(fdwReason == DLL_PROCESS_ATTACH) hProxyDll = hinstDLL; \
43 HRESULT STDAPICALLTYPE DllRegisterServer(void) \
45 return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
47 HRESULT STDAPICALLTYPE DllUnregisterServer(void)\
49 return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID);\
52 #define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
55 #define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
56 #define PROXY_CLSID CLSID_PSFactoryBuffer
58 #define CLSID_PSFACTORYBUFFER
62 #define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] != 0 ? aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
64 #define GET_DLL_CLSID &PROXY_CLSID
66 #define EXTERN_PROXY_FILE(name) EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
67 #define PROXYFILE_LIST_START const ProxyFileInfo * aProxyFileList[] = {
68 #define REFERENCE_PROXY_FILE(name) & name##_ProxyFileInfo
69 #define PROXYFILE_LIST_END 0 };
70 #define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
71 void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId ) \
72 { *pInfo = pPFList; *pId = pClsid; };
73 #define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory) HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid,REFIID riid,void **ppv) \
74 { return NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); }
75 #define DLLCANUNLOADNOW(pFactory) HRESULT STDAPICALLTYPE DllCanUnloadNow(void) \
76 { return NdrDllCanUnloadNow( pFactory ); }
77 #define DLLDUMMYPURECALL void __cdecl _purecall(void) { }
78 #define CSTDSTUBBUFFERRELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
79 { return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory); }
80 #ifdef PROXY_DELEGATION
81 #define CSTDSTUBBUFFER2RELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
82 { return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory); }
84 #define CSTDSTUBBUFFER2RELEASE(pFactory)
87 #ifdef REGISTER_PROXY_DLL
88 #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID)
90 #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID)
92 #define DLLDATA_ROUTINES(pProxyFileList,pClsID) \
93 CLSID_PSFACTORYBUFFER \
94 CStdPSFactoryBuffer gPFactory = {0,0,0,0}; \
95 DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
96 DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory) \
97 DLLCANUNLOADNOW(&gPFactory) \
98 CSTDSTUBBUFFERRELEASE(&gPFactory) \
99 CSTDSTUBBUFFER2RELEASE(&gPFactory) \
101 DLLREGISTRY_ROUTINES(pProxyFileList, pClsID)
103 #define DLLDATA_STANDARD_ROUTINES DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer)
105 #define CINTERFACE_PROXY_VTABLE(n) \
108 CInterfaceProxyHeader header; \
112 struct tagCInterfaceStubVtbl
;
113 struct tagCInterfaceProxyVtbl
;
114 typedef struct tagCInterfaceStubVtbl
*PCInterfaceStubVtblList
;
115 typedef struct tagCInterfaceProxyVtbl
*PCInterfaceProxyVtblList
;
116 typedef const char *PCInterfaceName
;
117 typedef int __stdcall
IIDLookupRtn(const IID
*,int*);
118 typedef IIDLookupRtn
*PIIDLookup
;
119 typedef struct tagProxyFileInfo
{
120 const PCInterfaceProxyVtblList
*pProxyVtblList
;
121 const PCInterfaceStubVtblList
*pStubVtblList
;
122 const PCInterfaceName
* pNamesArray
;
123 const IID
** pDelegatedIIDs
;
124 const PIIDLookup pIIDLookupRtn
;
125 unsigned short TableSize
;
126 unsigned short TableVersion
;
127 unsigned long Filler1
;
128 unsigned long Filler2
;
129 unsigned long Filler3
;
130 unsigned long Filler4
;
132 typedef ProxyFileInfo ExtendedProxyFileInfo
;
134 typedef struct tagCInterfaceProxyHeader
{
135 #ifdef USE_STUBLESS_PROXY
136 const void *pStublessProxyInfo
;
139 } CInterfaceProxyHeader
;
140 typedef struct tagCInterfaceProxyVtbl
{
141 CInterfaceProxyHeader header
;
142 #if defined(__WATCOMC__)
150 } CInterfaceProxyVtbl
;
151 typedef void (__RPC_STUB
*PRPC_STUB_FUNCTION
)(IRpcStubBuffer
*,IRpcChannelBuffer
*,PRPC_MESSAGE
,DWORD
*);
152 typedef struct tagCInterfaceStubHeader
{
154 const MIDL_SERVER_INFO
*pServerInfo
;
155 unsigned long DispatchTableCount
;
156 const PRPC_STUB_FUNCTION
*pDispatchTable
;
157 } CInterfaceStubHeader
;
158 typedef struct tagCInterfaceStubVtbl
{
159 CInterfaceStubHeader header
;
160 IRpcStubBufferVtbl Vtbl
;
161 } CInterfaceStubVtbl
;
162 typedef struct tagCStdStubBuffer
{
163 const struct IRpcStubBufferVtbl
* lpVtbl
;
165 struct IUnknown
*pvServerObject
;
166 const struct ICallFactoryVtbl
* pCallFactoryVtbl
;
167 const IID
* pAsyncIID
;
168 struct IPSFactoryBuffer
* pPSFactory
;
169 const struct IReleaseMarshalBuffersVtbl
* pRMBVtbl
;
171 typedef struct tagCStdPSFactoryBuffer
{
172 const IPSFactoryBufferVtbl
*lpVtbl
;
174 const ProxyFileInfo
** pProxyFileList
;
176 } CStdPSFactoryBuffer
;
177 void RPC_ENTRY
NdrProxyInitialize(void*,PRPC_MESSAGE
,PMIDL_STUB_MESSAGE
,PMIDL_STUB_DESC
,unsigned int);
178 void RPC_ENTRY
NdrProxyGetBuffer(void*,PMIDL_STUB_MESSAGE
);
179 void RPC_ENTRY
NdrProxySendReceive(void*,MIDL_STUB_MESSAGE
*);
180 void RPC_ENTRY
NdrProxyFreeBuffer(void*,MIDL_STUB_MESSAGE
*);
181 HRESULT RPC_ENTRY
NdrProxyErrorHandler(DWORD
);
182 void RPC_ENTRY
NdrStubInitialize(PRPC_MESSAGE
,PMIDL_STUB_MESSAGE
,PMIDL_STUB_DESC
,IRpcChannelBuffer
*);
183 void __RPC_STUB
NdrStubForwardingFunction(IRpcStubBuffer
*,IRpcChannelBuffer
*,PRPC_MESSAGE
,DWORD
*);
184 void RPC_ENTRY
NdrStubGetBuffer(IRpcStubBuffer
*,IRpcChannelBuffer
*,PMIDL_STUB_MESSAGE
);
185 HRESULT RPC_ENTRY
NdrStubErrorHandler(DWORD
);
186 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_QueryInterface(IRpcStubBuffer
*,REFIID
,void**);
187 ULONG STDMETHODCALLTYPE
CStdStubBuffer_AddRef(IRpcStubBuffer
*);
188 ULONG STDMETHODCALLTYPE
CStdStubBuffer_Release(IRpcStubBuffer
*);
189 ULONG STDMETHODCALLTYPE
NdrCStdStubBuffer_Release(IRpcStubBuffer
*,IPSFactoryBuffer
*);
190 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_Connect(IRpcStubBuffer
*,IUnknown
*);
191 void STDMETHODCALLTYPE
CStdStubBuffer_Disconnect(IRpcStubBuffer
*);
192 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_Invoke(IRpcStubBuffer
*,RPCOLEMESSAGE
*,IRpcChannelBuffer
*);
193 IRpcStubBuffer
* STDMETHODCALLTYPE
CStdStubBuffer_IsIIDSupported(IRpcStubBuffer
*,REFIID
);
194 ULONG STDMETHODCALLTYPE
CStdStubBuffer_CountRefs(IRpcStubBuffer
*);
195 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer
*,void**);
196 void STDMETHODCALLTYPE
CStdStubBuffer_DebugServerRelease(IRpcStubBuffer
*,void*);
197 HRESULT RPC_ENTRY
NdrDllGetClassObject(REFCLSID
,REFIID
,void**,const ProxyFileInfo
**,const CLSID
*,CStdPSFactoryBuffer
*);
198 HRESULT RPC_ENTRY
NdrDllCanUnloadNow(CStdPSFactoryBuffer
*);
200 HRESULT RPC_ENTRY
NdrDllRegisterProxy(HMODULE
,const ProxyFileInfo
**,const CLSID
*);
201 HRESULT RPC_ENTRY
NdrDllUnregisterProxy(HMODULE
,const ProxyFileInfo
**,const CLSID
*);
202 #define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
203 ULONG STDMETHODCALLTYPE
204 CStdStubBuffer2_Release(IRpcStubBuffer
*);
205 ULONG STDMETHODCALLTYPE
206 NdrCStdStubBuffer2_Release(IRpcStubBuffer
*,IPSFactoryBuffer
*);
207 #define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
213 #endif /* defined __cplusplus && !defined CINTERFACE */
214 #endif /* ndef _RPCPROXY_H */