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
9 #if defined __cplusplus && !defined CINTERFACE
10 #warning "rpcproxy type definitions require CINTERFACE"
19 #define CStdStubBuffer_METHODS CStdStubBuffer_QueryInterface,CStdStubBuffer_AddRef,\
20 CStdStubBuffer_Release,CStdStubBuffer_Connect,CStdStubBuffer_Disconnect,CStdStubBuffer_Invoke,\
21 CStdStubBuffer_IsIIDSupported,CStdStubBuffer_CountRefs,CStdStubBuffer_DebugServerQueryInterface,\
22 CStdStubBuffer_DebugServerRelease
23 #define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID,name##_ProxyVtblList[index]->header.piid,16)
24 #define IID_BS_LOOKUP_SETUP int result, low=-1;
25 #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; }
26 #define IID_BS_LOOKUP_NEXT_TEST(name,split) if ((result = name##_CHECK_IID(low+split))>=0) { low=low+split; if (!result) goto found_label; }
27 #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;
28 #define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
29 HINSTANCE hProxyDll = 0; \
30 BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) \
32 if(fdwReason == DLL_PROCESS_ATTACH) hProxyDll = hinstDLL; \
35 HRESULT STDAPICALLTYPE DllRegisterServer(void) \
37 return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
39 HRESULT STDAPICALLTYPE DllUnregisterServer(void)\
41 return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID);\
44 #define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
47 #define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
48 #define PROXY_CLSID CLSID_PSFactoryBuffer
50 #define CLSID_PSFACTORYBUFFER
54 #define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] != 0 ? aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
56 #define GET_DLL_CLSID &PROXY_CLSID
58 #define EXTERN_PROXY_FILE(name) EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
59 #define PROXYFILE_LIST_START const ProxyFileInfo * aProxyFileList[] = {
60 #define REFERENCE_PROXY_FILE(name) & name##_ProxyFileInfo
61 #define PROXYFILE_LIST_END 0 };
62 #define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
63 void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId ) \
64 { *pInfo = pPFList; *pId = pClsid; };
65 #define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory) HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid,REFIID riid,void **ppv) \
66 { return NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); }
67 #define DLLCANUNLOADNOW(pFactory) HRESULT STDAPICALLTYPE DllCanUnloadNow(void) \
68 { return NdrDllCanUnloadNow( pFactory ); }
69 #define DLLDUMMYPURECALL void __cdecl _purecall(void) { }
70 #define CSTDSTUBBUFFERRELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
71 { return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory); }
72 #ifdef PROXY_DELEGATION
73 #define CSTDSTUBBUFFER2RELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
74 { return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory); }
76 #define CSTDSTUBBUFFER2RELEASE(pFactory)
79 #ifdef REGISTER_PROXY_DLL
80 #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID)
82 #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID)
84 #define DLLDATA_ROUTINES(pProxyFileList,pClsID) \
85 CLSID_PSFACTORYBUFFER \
86 CStdPSFactoryBuffer gPFactory = {0,0,0,0}; \
87 DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
88 DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory) \
89 DLLCANUNLOADNOW(&gPFactory) \
90 CSTDSTUBBUFFERRELEASE(&gPFactory) \
91 CSTDSTUBBUFFER2RELEASE(&gPFactory) \
93 DLLREGISTRY_ROUTINES(pProxyFileList, pClsID)
95 #define DLLDATA_STANDARD_ROUTINES DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer)
97 struct tagCInterfaceStubVtbl
;
98 struct tagCInterfaceProxyVtbl
;
99 typedef struct tagCInterfaceStubVtbl
*PCInterfaceStubVtblList
;
100 typedef struct tagCInterfaceProxyVtbl
*PCInterfaceProxyVtblList
;
101 typedef const char *PCInterfaceName
;
102 typedef int __stdcall
IIDLookupRtn(const IID
*,int*);
103 typedef IIDLookupRtn
*PIIDLookup
;
104 typedef struct tagProxyFileInfo
{
105 const PCInterfaceProxyVtblList
*pProxyVtblList
;
106 const PCInterfaceStubVtblList
*pStubVtblList
;
107 const PCInterfaceName
* pNamesArray
;
108 const IID
** pDelegatedIIDs
;
109 const PIIDLookup pIIDLookupRtn
;
110 unsigned short TableSize
;
111 unsigned short TableVersion
;
112 unsigned long Filler1
;
113 unsigned long Filler2
;
114 unsigned long Filler3
;
115 unsigned long Filler4
;
117 typedef ProxyFileInfo ExtendedProxyFileInfo
;
119 typedef struct tagCInterfaceProxyHeader
{
120 #ifdef USE_STUBLESS_PROXY
121 const void *pStublessProxyInfo
;
124 } CInterfaceProxyHeader
;
125 typedef struct tagCInterfaceProxyVtbl
{
126 CInterfaceProxyHeader header
;
127 #if defined(__WATCOMC__)
135 } CInterfaceProxyVtbl
;
136 typedef void (__RPC_STUB
*PRPC_STUB_FUNCTION
)(IRpcStubBuffer
*,IRpcChannelBuffer
*,PRPC_MESSAGE
,DWORD
*);
137 typedef struct tagCInterfaceStubHeader
{
139 const MIDL_SERVER_INFO
*pServerInfo
;
140 unsigned long DispatchTableCount
;
141 const PRPC_STUB_FUNCTION
*pDispatchTable
;
142 } CInterfaceStubHeader
;
143 typedef struct tagCInterfaceStubVtbl
{
144 CInterfaceStubHeader header
;
145 IRpcStubBufferVtbl Vtbl
;
146 } CInterfaceStubVtbl
;
147 typedef struct tagCStdStubBuffer
{
148 const struct IRpcStubBufferVtbl
* lpVtbl
;
150 struct IUnknown
*pvServerObject
;
152 typedef struct tagCStdPSFactoryBuffer
{
153 const IPSFactoryBufferVtbl
*lpVtbl
;
155 const ProxyFileInfo
** pProxyFileList
;
157 } CStdPSFactoryBuffer
;
158 void RPC_ENTRY
NdrProxyInitialize(void*,PRPC_MESSAGE
,PMIDL_STUB_MESSAGE
,PMIDL_STUB_DESC
,unsigned int);
159 void RPC_ENTRY
NdrProxyGetBuffer(void*,PMIDL_STUB_MESSAGE
);
160 void RPC_ENTRY
NdrProxySendReceive(void*,MIDL_STUB_MESSAGE
*);
161 void RPC_ENTRY
NdrProxyFreeBuffer(void*,MIDL_STUB_MESSAGE
*);
162 HRESULT RPC_ENTRY
NdrProxyErrorHandler(DWORD
);
163 void RPC_ENTRY
NdrStubInitialize(PRPC_MESSAGE
,PMIDL_STUB_MESSAGE
,PMIDL_STUB_DESC
,IRpcChannelBuffer
*);
164 void __RPC_STUB
NdrStubForwardingFunction(IRpcStubBuffer
*,IRpcChannelBuffer
*,PRPC_MESSAGE
,DWORD
*);
165 void RPC_ENTRY
NdrStubGetBuffer(IRpcStubBuffer
*,IRpcChannelBuffer
*,PMIDL_STUB_MESSAGE
);
166 HRESULT RPC_ENTRY
NdrStubErrorHandler(DWORD
);
167 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_QueryInterface(IRpcStubBuffer
*,REFIID
,void**);
168 ULONG STDMETHODCALLTYPE
CStdStubBuffer_AddRef(IRpcStubBuffer
*);
169 ULONG STDMETHODCALLTYPE
CStdStubBuffer_Release(IRpcStubBuffer
*);
170 ULONG STDMETHODCALLTYPE
NdrCStdStubBuffer_Release(IRpcStubBuffer
*,IPSFactoryBuffer
*);
171 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_Connect(IRpcStubBuffer
*,IUnknown
*);
172 void STDMETHODCALLTYPE
CStdStubBuffer_Disconnect(IRpcStubBuffer
*);
173 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_Invoke(IRpcStubBuffer
*,RPCOLEMESSAGE
*,IRpcChannelBuffer
*);
174 IRpcStubBuffer
* STDMETHODCALLTYPE
CStdStubBuffer_IsIIDSupported(IRpcStubBuffer
*,REFIID
);
175 ULONG STDMETHODCALLTYPE
CStdStubBuffer_CountRefs(IRpcStubBuffer
*);
176 HRESULT STDMETHODCALLTYPE
CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer
*,void**);
177 void STDMETHODCALLTYPE
CStdStubBuffer_DebugServerRelease(IRpcStubBuffer
*,void*);
178 HRESULT RPC_ENTRY
NdrDllGetClassObject(REFCLSID
,REFIID
,void**,const ProxyFileInfo
**,const CLSID
*,CStdPSFactoryBuffer
*);
179 HRESULT RPC_ENTRY
NdrDllCanUnloadNow(CStdPSFactoryBuffer
*);
181 HRESULT RPC_ENTRY
NdrDllRegisterProxy(HMODULE
,const ProxyFileInfo
**,const CLSID
*);
182 HRESULT RPC_ENTRY
NdrDllUnregisterProxy(HMODULE
,const ProxyFileInfo
**,const CLSID
*);
183 #define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
184 ULONG STDMETHODCALLTYPE
185 CStdStubBuffer2_Release(IRpcStubBuffer
*);
186 ULONG STDMETHODCALLTYPE
187 NdrCStdStubBuffer2_Release(IRpcStubBuffer
*,IPSFactoryBuffer
*);
188 #define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
194 #endif /* defined __cplusplus && !defined CINTERFACE */
195 #endif /* ndef _RPCPROXY_H */