DceDispatchTable.cpp
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* DceDispatchTable.cpp - VxDCOM DceDispatchTable class */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,17dec01,nel  Add include symbol for diab.
  7. 01e,20sep00,nel  Add REFIID parameter to interfaceInfoGet method.
  8. 01d,18sep00,nel  SPR#33730. Merge T2 OPC fixes into T3 branch.
  9. 01c,10aug00,nel  Win2K fix.
  10. 01b,27jul99,drm  Returning CLSID from interfaceInfoGet().
  11. 01a,02jun99,dbs  created
  12. */
  13. #include "DceDispatchTable.h"
  14. #include "OxidResolver.h"
  15. #include "Syslog.h"
  16. /* Include symbol for diab build */
  17. extern "C" int include_vxdcom_DceDispatchTable (void)
  18.     {
  19.     return 0;
  20.     }
  21. //////////////////////////////////////////////////////////////////////////
  22. //
  23. bool DceDispatchTable::supportsInterface (REFIID riid)
  24.     {
  25.     VxCritSec cs (m_mutex);
  26.     return (m_dispmap.find (riid) != m_dispmap.end ());
  27.     }
  28. //////////////////////////////////////////////////////////////////////////
  29. //
  30. HRESULT DceDispatchTable::interfaceInfoGet
  31.     (
  32.     REFIID      riid,
  33.     REFIPID /*ripid*/,
  34.     ULONG methodNum,
  35.     IUnknown** ppunk,
  36.     PFN_ORPC_STUB* ppfn,
  37.     CLSID & classid
  38.     )
  39.     {
  40.     classid = GUID_NULL;
  41.     VxCritSec cs (m_mutex);
  42.     VXDCOM_STUB_DISPTBL* ptbl = m_dispmap [riid];
  43.     if (methodNum >= ptbl->nFuncs)
  44.         {
  45.         if (IsEqualGUID (riid, IID_IOXIDResolver))
  46.             {
  47.             // strange failure value required by win2k when querying 
  48.             // OXIDResolver for method 5 (which it doesn't support
  49.             return MAKE_HRESULT (0, 0x1c01, 2);
  50.             }
  51.         return MAKE_HRESULT (SEVERITY_ERROR,
  52.                              FACILITY_RPC,
  53.                              RPC_S_PROCNUM_OUT_OF_RANGE);
  54.         }
  55.     *ppfn = ptbl->funcs [methodNum];
  56.     *ppunk = 0;
  57.     return S_OK;
  58.     }
  59. //////////////////////////////////////////////////////////////////////////
  60. //
  61. // DceDispatchTable::dceInterfaceRegister -- method to register DCE
  62. // RPC interface with stub dispatch-table...
  63. //
  64. HRESULT DceDispatchTable::dceInterfaceRegister
  65.     (
  66.     REFIID riid,
  67.     const VXDCOM_STUB_DISPTBL* ptbl
  68.     )
  69.     {
  70.     m_dispmap [riid] = const_cast<VXDCOM_STUB_DISPTBL*> (ptbl);
  71.     return S_OK;
  72.     }