home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / RTLWIN32.PAK / RPCPROXY.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  16.8 KB  |  597 lines

  1. /*++
  2.  
  3. Copyright (c) 1992-1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     rpcproxy.h
  8.  
  9. Abstract:
  10.  
  11.     Definitions for rpc proxy  stubs.
  12.  
  13. Compiler switches:
  14.  
  15.     -DREGISTER_PROXY_DLL
  16.         Generates DllMain, DllRegisterServer, and DllUnregisterServer functions
  17.         for automatically registering a proxy DLL.
  18.  
  19.     -DPROXY_CLSID=clsid
  20.         Specifies a class ID to be used by the proxy DLL.
  21.  
  22.     -DPROXY_CLSID_IS={0x6f11fe5c,0x2fc5,0x101b,{0x9e,0x45,0x00,0x00,0x0b,0x65,0xc7,0xef}}
  23.         Specifies the value of the class ID to be used by the proxy DLL.
  24.  
  25.     -DNT35_STRICT
  26.         Specifies that the target platform is Windows NT 3.5. This switch disables
  27.         the new functions added after the Windows NT 3.5 release.
  28.  
  29. --*/
  30.  
  31. #ifndef __RPCPROXY_H__
  32. #define __RPCPROXY_H__
  33. #define __midl_proxy
  34. #pragma option -b
  35.  
  36. #ifndef INC_OLE2
  37. #define INC_OLE2
  38. #endif
  39.  
  40. #if defined(WIN32) || defined(_MPPC_)
  41.  
  42. //We need to define REFIID, REFCLSID, REFGUID, & REFFMTID here so that the
  43. //proxy code won't get the const GUID *const definition.
  44. #ifndef GUID_DEFINED
  45. #define GUID_DEFINED
  46. typedef struct _GUID
  47. {
  48.     unsigned long Data1;
  49.     unsigned short Data2;
  50.     unsigned short Data3;
  51.     unsigned char Data4[8];
  52. } GUID;
  53. #endif /* GUID_DEFINED */
  54.  
  55. #if !defined( __IID_DEFINED__ )
  56.     #define __IID_DEFINED__
  57.  
  58.     typedef GUID IID;
  59.     typedef IID *LPIID;
  60.     #define IID_NULL            GUID_NULL
  61.     #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
  62.     typedef GUID CLSID;
  63.     typedef CLSID *LPCLSID;
  64.     #define CLSID_NULL          GUID_NULL
  65.     #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
  66.     typedef GUID FMTID;
  67.     typedef FMTID *LPFMTID;
  68.     #define FMTID_NULL          GUID_NULL
  69.     #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
  70.  
  71.     #ifndef _REFGUID_DEFINED
  72.         #define _REFGUID_DEFINED
  73.         typedef const GUID *REFGUID;
  74.     #endif // !_REFGUID_DEFINED
  75.  
  76.     #ifndef _REFIID_DEFINED
  77.         #define _REFIID_DEFINED
  78.         typedef const IID *REFIID;
  79.     #endif // !_REFIID_DEFINED
  80.  
  81.     #ifndef _REFCLSID_DEFINED
  82.         #define _REFCLSID_DEFINED
  83.         typedef const CLSID *REFCLSID;
  84.     #endif // !_REFCLSID_DEFINED
  85.  
  86.     #ifndef _REFFMTID_DEFINED
  87.         #define _REFFMTID_DEFINED
  88.         typedef const FMTID *REFFMTID;
  89.     #endif // !_REFFMTID_DEFINED
  90.  
  91. #endif // !__IID_DEFINED__
  92.  
  93. // forward declarations
  94. struct tagCInterfaceStubVtbl;
  95. struct tagCInterfaceProxyVtbl;
  96.  
  97. typedef struct tagCInterfaceStubVtbl *  PCInterfaceStubVtblList;
  98. typedef struct tagCInterfaceProxyVtbl *  PCInterfaceProxyVtblList;
  99. typedef const char *                    PCInterfaceName;
  100. typedef int __stdcall IIDLookupRtn( const IID * pIID, int * pIndex );
  101. typedef IIDLookupRtn * PIIDLookup;
  102.  
  103. // pointers to arrays of CInterfaceProxyVtbl's and CInterfaceStubVtbls
  104. typedef struct tagProxyFileInfo
  105. {
  106.     const PCInterfaceProxyVtblList *pProxyVtblList;
  107.     const PCInterfaceStubVtblList *pStubVtblList;
  108.     const PCInterfaceName *     pNamesArray;
  109.     const IID **                pDelegatedIIDs;
  110.     const PIIDLookup            pIIDLookupRtn;
  111.     unsigned short              TableSize;
  112.     unsigned short              TableVersion;
  113.     unsigned long               Filler1;
  114.     unsigned long               Filler2;
  115.     unsigned long               Filler3;
  116.     unsigned long               Filler4;
  117. }ProxyFileInfo;
  118.  
  119. // extended info with list of interface names
  120. typedef ProxyFileInfo ExtendedProxyFileInfo;
  121.  
  122. #pragma option -b.
  123. #include <rpc.h>
  124. #pragma option -b
  125. #pragma option -b.
  126. #include <rpcndr.h>
  127. #pragma option -b
  128. #pragma option -b.
  129. #include <string.h>
  130. #pragma option -b
  131. #pragma option -b.
  132. #include <memory.h>
  133. #pragma option -b
  134.  
  135. typedef struct tagCInterfaceProxyHeader
  136. {
  137.     //
  138.     // New fields should be added here, at the beginning of the structure.
  139.     //
  140. #ifdef USE_STUBLESS_PROXY
  141.     const void *    pStublessProxyInfo;
  142. #endif
  143.     const IID *     piid;
  144. } CInterfaceProxyHeader;
  145.  
  146. // Macro used for ANSI compatible stubs.
  147.  
  148. #if defined(_MPPC_)
  149. #define CINTERFACE_PROXY_VTABLE( n )  \
  150. struct \
  151. {                                     \
  152.     CInterfaceProxyHeader header;     \
  153.     void * pDummyEntryForPowerMac;    \
  154.     void *Vtbl[ n ];                  \
  155. }
  156. #else
  157. #define CINTERFACE_PROXY_VTABLE( n )  \
  158. struct \
  159. {                                     \
  160.     CInterfaceProxyHeader header;     \
  161.     void *Vtbl[ n ];                  \
  162. }
  163. #endif
  164.  
  165. #pragma warning( disable:4200 )
  166. typedef struct tagCInterfaceProxyVtbl
  167. {
  168.     CInterfaceProxyHeader header;
  169. #if defined(_MPPC_)
  170.     void * pDummyEntryForPowerMac;
  171. #endif
  172. #if defined( _MSC_VER )
  173.     void *Vtbl[];
  174. #else
  175.     void *Vtbl[1];
  176. #endif
  177. } CInterfaceProxyVtbl;
  178. #pragma warning( default:4200 )
  179.  
  180. typedef
  181. void
  182. (__RPC_STUB __RPC_FAR * PRPC_STUB_FUNCTION) (
  183.     IRpcStubBuffer *This,
  184.     IRpcChannelBuffer * _pRpcChannelBuffer,
  185.     PRPC_MESSAGE _pRpcMessage,
  186.     DWORD __RPC_FAR *pdwStubPhase);
  187.  
  188. typedef struct tagCInterfaceStubHeader
  189. {
  190.     //New fields should be added here, at the beginning of the structure.
  191.     const IID *piid;
  192.     const MIDL_SERVER_INFO *pServerInfo;
  193.     unsigned long DispatchTableCount;
  194.     const PRPC_STUB_FUNCTION *pDispatchTable;
  195. } CInterfaceStubHeader;
  196.  
  197. typedef struct tagCInterfaceStubVtbl
  198. {
  199.     CInterfaceStubHeader header;
  200.     IRpcStubBufferVtbl Vtbl;
  201. } CInterfaceStubVtbl;
  202.  
  203. typedef struct tagCStdStubBuffer
  204. {
  205.     const struct IRpcStubBufferVtbl *   lpVtbl; //Points to Vtbl field in CInterfaceStubVtbl.
  206.     long                                RefCount;
  207.     struct IUnknown *                   pvServerObject;
  208. } CStdStubBuffer;
  209.  
  210. typedef struct tagCStdPSFactoryBuffer
  211. {
  212.     const IPSFactoryBufferVtbl *lpVtbl;
  213.     long                    RefCount;
  214.     const ProxyFileInfo **  pProxyFileList;
  215.     long                    Filler1;  //Reserved for future use.
  216. } CStdPSFactoryBuffer;
  217.  
  218. void RPC_ENTRY
  219. NdrProxyInitialize(
  220.     void *              This,
  221.     PRPC_MESSAGE        pRpcMsg,
  222.     PMIDL_STUB_MESSAGE  pStubMsg,
  223.     PMIDL_STUB_DESC     pStubDescriptor,
  224.     unsigned int        ProcNum );
  225.  
  226. void RPC_ENTRY
  227. NdrProxyGetBuffer(
  228.     void *              This,
  229.     PMIDL_STUB_MESSAGE pStubMsg);
  230.  
  231. void RPC_ENTRY
  232. NdrProxySendReceive(
  233.     void                *This,
  234.     MIDL_STUB_MESSAGE   *pStubMsg);
  235.  
  236. void RPC_ENTRY
  237. NdrProxyFreeBuffer(
  238.     void                *This,
  239.     MIDL_STUB_MESSAGE   *pStubMsg);
  240.  
  241. HRESULT RPC_ENTRY
  242. NdrProxyErrorHandler(
  243.     DWORD dwExceptionCode);
  244.  
  245. void RPC_ENTRY
  246. NdrStubInitialize(
  247.     PRPC_MESSAGE        pRpcMsg,
  248.     PMIDL_STUB_MESSAGE  pStubMsg,
  249.     PMIDL_STUB_DESC     pStubDescriptor,
  250.     IRpcChannelBuffer * pRpcChannelBuffer);
  251.  
  252. void __RPC_STUB NdrStubForwardingFunction(
  253.     IN  IRpcStubBuffer *    This,
  254.     IN  IRpcChannelBuffer * pChannel,
  255.     IN  PRPC_MESSAGE        pmsg,
  256.     OUT DWORD __RPC_FAR *   pdwStubPhase);
  257.  
  258. void RPC_ENTRY
  259. NdrStubGetBuffer(
  260.     IRpcStubBuffer *    This,
  261.     IRpcChannelBuffer * pRpcChannelBuffer,
  262.     PMIDL_STUB_MESSAGE  pStubMsg);
  263.  
  264. HRESULT RPC_ENTRY
  265. NdrStubErrorHandler(
  266.     DWORD dwExceptionCode);
  267.  
  268. HRESULT STDMETHODCALLTYPE
  269. CStdStubBuffer_QueryInterface(
  270.     IRpcStubBuffer *This,
  271.     REFIID riid,
  272.     void **ppvObject);
  273.  
  274. ULONG STDMETHODCALLTYPE
  275. CStdStubBuffer_AddRef(
  276.     IRpcStubBuffer *This);
  277.  
  278. ULONG STDMETHODCALLTYPE
  279. CStdStubBuffer_Release(
  280.     IRpcStubBuffer *This);
  281.  
  282. ULONG STDMETHODCALLTYPE
  283. NdrCStdStubBuffer_Release(
  284.     IRpcStubBuffer *This,
  285.     IPSFactoryBuffer * pPSF);
  286.  
  287. HRESULT STDMETHODCALLTYPE
  288. CStdStubBuffer_Connect(
  289.     IRpcStubBuffer *This,
  290.     IUnknown *pUnkServer);
  291.  
  292. void STDMETHODCALLTYPE
  293. CStdStubBuffer_Disconnect(
  294.     IRpcStubBuffer *This);
  295.  
  296. HRESULT STDMETHODCALLTYPE
  297. CStdStubBuffer_Invoke(
  298.     IRpcStubBuffer *This,
  299.     RPCOLEMESSAGE *pRpcMsg,
  300.     IRpcChannelBuffer *pRpcChannelBuffer);
  301.  
  302. IRpcStubBuffer * STDMETHODCALLTYPE
  303. CStdStubBuffer_IsIIDSupported(
  304.     IRpcStubBuffer *This,
  305.     REFIID riid);
  306.  
  307. ULONG STDMETHODCALLTYPE
  308. CStdStubBuffer_CountRefs(
  309.     IRpcStubBuffer *This);
  310.  
  311. HRESULT STDMETHODCALLTYPE
  312. CStdStubBuffer_DebugServerQueryInterface(
  313.     IRpcStubBuffer *This,
  314.     void **ppv);
  315.  
  316. void STDMETHODCALLTYPE
  317. CStdStubBuffer_DebugServerRelease(
  318.     IRpcStubBuffer *This,
  319.     void *pv);
  320.  
  321. #if defined(_MPPC_)
  322. #define CStdStubBuffer_METHODS \
  323.     0,  /* a PowerMac dummy */  \
  324.     CStdStubBuffer_QueryInterface,\
  325.     CStdStubBuffer_AddRef, \
  326.     CStdStubBuffer_Release, \
  327.     CStdStubBuffer_Connect, \
  328.     CStdStubBuffer_Disconnect, \
  329.     CStdStubBuffer_Invoke, \
  330.     CStdStubBuffer_IsIIDSupported, \
  331.     CStdStubBuffer_CountRefs, \
  332.     CStdStubBuffer_DebugServerQueryInterface, \
  333.     CStdStubBuffer_DebugServerRelease
  334. #else
  335. #define CStdStubBuffer_METHODS \
  336.     CStdStubBuffer_QueryInterface,\
  337.     CStdStubBuffer_AddRef, \
  338.     CStdStubBuffer_Release, \
  339.     CStdStubBuffer_Connect, \
  340.     CStdStubBuffer_Disconnect, \
  341.     CStdStubBuffer_Invoke, \
  342.     CStdStubBuffer_IsIIDSupported, \
  343.     CStdStubBuffer_CountRefs, \
  344.     CStdStubBuffer_DebugServerQueryInterface, \
  345.     CStdStubBuffer_DebugServerRelease
  346. #endif
  347.  
  348. //+-------------------------------------------------------------------------
  349. //
  350. //  Macro definitions for the proxy file
  351. //
  352. //--------------------------------------------------------------------------
  353.  
  354. #define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp( pIID, name##_ProxyVtblList[ index ]->header.piid, 16 )
  355.  
  356. #define IID_BS_LOOKUP_SETUP     int result, low=-1;
  357.  
  358. #define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split)   \
  359.     if ( ( result = name##_CHECK_IID( split ) ) > 0 ) \
  360.         { low = sz - split; }                      \
  361.     else if ( !result )                               \
  362.         { low = split; goto found_label; }
  363.  
  364. #define IID_BS_LOOKUP_NEXT_TEST(name, split )         \
  365.     if ( ( result = name##_CHECK_IID( low + split )) >= 0 )  \
  366.         { low = low + split; if ( !result ) goto found_label; }
  367.  
  368. #define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index )                  \
  369.     low = low + 1;                                          \
  370.     if ( ( low >= sz ) || (result = name##_CHECK_IID( low ) )) goto not_found_label; \
  371.     found_label: (index) = low; return 1;                         \
  372.     not_found_label: return 0;
  373.  
  374. //+-------------------------------------------------------------------------
  375. //
  376. //  Macro and routine definitions for the dlldata file
  377. //
  378. //--------------------------------------------------------------------------
  379.  
  380. /****************************************************************************
  381.  * Proxy Dll APIs
  382.  ****************************************************************************/
  383.  
  384. HRESULT RPC_ENTRY
  385. NdrDllGetClassObject (
  386.     IN  REFCLSID                rclsid,
  387.     IN  REFIID                  riid,
  388.     OUT void **                 ppv,
  389.     IN const ProxyFileInfo **   pProxyFileList,
  390.     IN const CLSID *            pclsid,
  391.     IN CStdPSFactoryBuffer *    pPSFactoryBuffer);
  392.  
  393. HRESULT RPC_ENTRY
  394. NdrDllCanUnloadNow(
  395.     IN CStdPSFactoryBuffer * pPSFactoryBuffer);
  396.  
  397. /*************************************************************************
  398. The following new functions were added after the Windows NT 3.5 release.
  399. Programs intended to run on Windows NT 3.5 should define NT35_STRICT to
  400. ensure that no new functions are used.
  401. *************************************************************************/
  402. #ifndef NT35_STRICT
  403.  
  404. HRESULT RPC_ENTRY NdrDllRegisterProxy(
  405.     IN HMODULE                  hDll,
  406.     IN const ProxyFileInfo **   pProxyFileList,
  407.     IN const CLSID *            pclsid);
  408.  
  409. HRESULT RPC_ENTRY NdrDllUnregisterProxy(
  410.     IN HMODULE                  hDll,
  411.     IN const ProxyFileInfo **   pProxyFileList,
  412.     IN const CLSID *            pclsid);
  413.  
  414.  
  415. #define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
  416.     \
  417.     HINSTANCE hProxyDll = 0; \
  418.     \
  419.     /*DllMain saves the DLL module handle for later use by DllRegisterServer */ \
  420.     BOOL WINAPI DllMain( \
  421.         HINSTANCE  hinstDLL, \
  422.         DWORD  fdwReason, \
  423.         LPVOID  lpvReserved) \
  424.     { \
  425.         if(fdwReason == DLL_PROCESS_ATTACH) \
  426.             hProxyDll = hinstDLL; \
  427.         return TRUE; \
  428.     } \
  429.     \
  430.     /* DllRegisterServer registers the interfaces contained in the proxy DLL. */ \
  431.     HRESULT STDAPICALLTYPE DllRegisterServer() \
  432.     { \
  433.         return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
  434.     }  \
  435.     \
  436.     /* DllUnregisterServer unregisters the interfaces contained in the proxy DLL. */ \
  437.     HRESULT STDAPICALLTYPE DllUnregisterServer() \
  438.     { \
  439.         return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID); \
  440.     }
  441.  
  442. //Delegation support.
  443. #define STUB_FORWARDING_FUNCTION        NdrStubForwardingFunction
  444.  
  445. ULONG STDMETHODCALLTYPE
  446. CStdStubBuffer2_Release(IRpcStubBuffer *This);
  447.  
  448. ULONG STDMETHODCALLTYPE
  449. NdrCStdStubBuffer2_Release(IRpcStubBuffer *This,IPSFactoryBuffer * pPSF);
  450.  
  451. #define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
  452.  
  453. #endif //NT35_STRICT
  454. /*************************************************************************
  455. End of new functions.
  456. *************************************************************************/
  457.  
  458. // PROXY_CLSID has precedence over PROXY_CLSID_IS
  459.  
  460. #ifdef PROXY_CLSID
  461.  
  462. #define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
  463.  
  464. #else // PROXY_CLSID
  465.  
  466. #ifdef PROXY_CLSID_IS
  467. #define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
  468. #define PROXY_CLSID     CLSID_PSFactoryBuffer
  469. #else // PROXY_CLSID_IS
  470. #define CLSID_PSFACTORYBUFFER
  471. #endif //PROXY_CLSID_IS
  472.  
  473. #endif //PROXY_CLSID
  474.  
  475. // if the user specified an override for the class id, it is
  476. // PROXY_CLSID at this point
  477.  
  478. #ifndef PROXY_CLSID
  479. #define GET_DLL_CLSID   \
  480.     ( aProxyFileList[0]->pStubVtblList[0] != 0 ? \
  481.     aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
  482. #else  //PROXY_CLSID
  483. #define GET_DLL_CLSID   &PROXY_CLSID
  484. #endif //PROXY_CLSID
  485.  
  486.  
  487.  
  488.  
  489. #define EXTERN_PROXY_FILE(name) \
  490.     EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
  491.  
  492. #define PROXYFILE_LIST_START    \
  493.     const ProxyFileInfo  *  aProxyFileList[]    = {
  494.  
  495. #define REFERENCE_PROXY_FILE(name)  \
  496.     & name##_ProxyFileInfo
  497.  
  498. #define PROXYFILE_LIST_END      \
  499.     0 };
  500.  
  501. // return pointers to the class information
  502.  
  503. #define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
  504.     void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId )  \
  505.         {   \
  506.         *pInfo  = pPFList;  \
  507.         *pId    = pClsid;   \
  508.         };
  509.  
  510. // ole entry points:
  511. #define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory)    \
  512.  HRESULT STDAPICALLTYPE DllGetClassObject ( \
  513.      REFCLSID rclsid, \
  514.      REFIID riid, \
  515.      void ** ppv ) \
  516.         { \
  517.         return  \
  518.             NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); \
  519.         }
  520.  
  521. #define DLLCANUNLOADNOW(pFactory)   \
  522.  HRESULT STDAPICALLTYPE DllCanUnloadNow()    \
  523.     {   \
  524.     return NdrDllCanUnloadNow( pFactory );    \
  525.     }
  526.  
  527.  
  528. #define DLLDUMMYPURECALL    \
  529.     void __cdecl _purecall(void)    \
  530.         {   \
  531.         }
  532.  
  533. #define CSTDSTUBBUFFERRELEASE(pFactory)   \
  534. ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
  535.     {   \
  536.     return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory);   \
  537.     }   \
  538.  
  539. #ifdef PROXY_DELEGATION
  540. #define CSTDSTUBBUFFER2RELEASE(pFactory)   \
  541. ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
  542.     {   \
  543.     return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory);   \
  544.     }
  545. #else
  546. #define CSTDSTUBBUFFER2RELEASE(pFactory)
  547. #endif //PROXY_DELEGATION
  548.  
  549.  
  550. #ifdef REGISTER_PROXY_DLL
  551. #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID )
  552. #else
  553. #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID )
  554. #endif //REGISTER_PROXY_DLL
  555.  
  556.  
  557. // the dll entry points that must be defined
  558. #define DLLDATA_ROUTINES(pProxyFileList,pClsID )    \
  559.     \
  560.     CLSID_PSFACTORYBUFFER \
  561.     \
  562.     CStdPSFactoryBuffer       gPFactory = {0,0,0,0};  \
  563.     \
  564.     DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
  565.     \
  566.     DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory)    \
  567.     \
  568.     DLLCANUNLOADNOW(&gPFactory)   \
  569.     \
  570.     CSTDSTUBBUFFERRELEASE(&gPFactory)   \
  571.     \
  572.     CSTDSTUBBUFFER2RELEASE(&gPFactory) \
  573.     \
  574.     DLLDUMMYPURECALL    \
  575.     \
  576.     DLLREGISTRY_ROUTINES(pProxyFileList, pClsID) \
  577.     \
  578.  
  579.     // more code goes here...
  580.  
  581.  
  582. #define DLLDATA_STANDARD_ROUTINES   \
  583.     DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer )  \
  584.  
  585. #else  // !defined(__RPC_DOS__) && !defined(__RPC_WIN16__)
  586.  
  587. //+-------------------------------------------------------------------------
  588. //
  589. //  16-bit definitions (all empty)
  590. //
  591. //--------------------------------------------------------------------------
  592.  
  593. #endif // WIN32 or _MPPC_
  594.  
  595. #pragma option -b.
  596. #endif // __RPCPROXY_H__
  597.