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