Ignore:
Timestamp:
Dec 12, 2015, 1:43:20 PM (6 years ago)
Author:
roman
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Common/alax.info/roatlcom.h

    r482 r553  
    101101#if _TRACE
    102102
     103inline BOOL TryFormatInterfaceName(const IID& Identifier, CString& sName)
     104{
     105        _A(sName.IsEmpty());
     106        static const CEnumerationNameT<IID> g_pMap[] =
     107        {
     108                #define A(x) { __uuidof(x), #x },
     109                A(IActivationFilter)
     110                A(IMarshal)
     111                //A(IProxyManager)
     112                A(IStdMarshalInfo)
     113                A(IExternalConnection)
     114                //A(IdentityUnmarshal)
     115                A(IMultiQI)
     116                A(IInternalUnknown)
     117                A(IFastRundown)
     118                A(INoMarshal)
     119                A(IDataObject)
     120                A(IAgileObject)
     121                A(IClassFactory)
     122                A(IClassFactory2)
     123                #undef A
     124        };
     125        sName = FormatEnumerationT(g_pMap, Identifier, TRUE);
     126        return !sName.IsEmpty();
     127}
     128
    103129#define DECLARE_QI_TRACE(_Class) \
    104130        static HRESULT WINAPI InternalQueryInterface(VOID* pThis, const _ATL_INTMAP_ENTRY* pEntries, REFIID InterfaceIdentifier, void** ppvObject) throw()\
     
    108134                _V(StringFromGUID2(InterfaceIdentifier, pszInterfaceIdentifier, DIM(pszInterfaceIdentifier))); \
    109135                ::CString sInterfaceName; \
    110                 if(!_RegKeyHelper::QueryStringValue(HKEY_CLASSES_ROOT, AtlFormatString(_T("Interface\\%ls"), pszInterfaceIdentifier), NULL, sInterfaceName)) \
    111                         sInterfaceName = ::CString(pszInterfaceIdentifier); \
     136                if(!TryFormatInterfaceName(InterfaceIdentifier, sInterfaceName)) \
     137                        if(!_RegKeyHelper::QueryStringValue(HKEY_CLASSES_ROOT, AtlFormatString(_T("Interface\\%ls"), pszInterfaceIdentifier), NULL, sInterfaceName)) \
     138                                sInterfaceName = ::CString(pszInterfaceIdentifier); \
    112139                ATLTRACE(atlTraceQI, SUCCEEDED(nResult) ? 4 : 3, _T("0x%p, Interface %s, Result 0x%08X\n"), pThis, sInterfaceName, nResult); \
    113140                return nResult;\
     
    561588public:
    562589// CFakeActiveObjectHandler
    563         static DWORD RegisterActiveObject(IUnknown* pUnknown, REFCLSID ClassIdentifier, DWORD nFlags) throw()
    564         {
    565                 pUnknown;
    566                 ClassIdentifier;
    567                 nFlags;
     590        static DWORD RegisterActiveObject(IUnknown* pUnknown, REFCLSID ClassIdentifier, DWORD nFlags)
     591        {
     592                pUnknown; ClassIdentifier; nFlags;
    568593                return 1;
    569594        }
    570         static VOID RevokeActiveObject(DWORD nCookie) throw()
    571         {
    572                 ATLASSERT(nCookie == 1);
     595        static VOID RevokeActiveObject(DWORD nCookie)
     596        {
     597                _A(nCookie == 1);
    573598        }
    574599};
     
    581606        {
    582607                DWORD nCookie;
    583                 ATLCHECK(::RegisterActiveObject(pUnknown, ClassIdentifier, nFlags, &nCookie));
     608                __C(::RegisterActiveObject(pUnknown, ClassIdentifier, nFlags, &nCookie));
    584609                return nCookie;
    585610        }
    586611        static VOID RevokeActiveObject(DWORD nCookie)
    587612        {
    588                 ATLCHECK(::RevokeActiveObject(nCookie, NULL));
     613                __C(::RevokeActiveObject(nCookie, NULL));
    589614        }
    590615};
     
    597622        {
    598623                WCHAR pszIdentifierString[64] = { 0 };
    599                 ATLVERIFY(StringFromGUID2(Identifier, pszIdentifierString, _countof(pszIdentifierString)));
     624                _W(StringFromGUID2(Identifier, pszIdentifierString, _countof(pszIdentifierString)));
    600625                return pszIdentifierString;
    601626        }
     
    604629                // NOTE: Direct registration into ROT allows us to specify ROTFLAGS_ALLOWANYCLIENT flag and
    605630                //       allow interaction between server *service* and client application
    606                 ATLASSERT(nFlags == ACTIVEOBJECT_STRONG);
     631                _A(nFlags == ACTIVEOBJECT_STRONG);
    607632                CComPtr<IRunningObjectTable> pRunningObjectTable;
    608                 ATLCHECK(GetRunningObjectTable(0, &pRunningObjectTable));
     633                __C(GetRunningObjectTable(0, &pRunningObjectTable));
    609634                CComPtr<IMoniker> pMoniker;
    610                 ATLCHECK(CreateItemMoniker(OLESTR("!"), StringFromIdentifier(ClassIdentifier), &pMoniker));
     635                __C(CreateItemMoniker(OLESTR("!"), StringFromIdentifier(ClassIdentifier), &pMoniker));
    611636                DWORD nCookie;
    612                 ATLCHECK(pRunningObjectTable->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE | ROTFLAGS_ALLOWANYCLIENT, pUnknown, pMoniker, &nCookie));
     637                __C(pRunningObjectTable->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE | ROTFLAGS_ALLOWANYCLIENT, pUnknown, pMoniker, &nCookie));
    613638                return nCookie;
    614639        }
     
    616641        {
    617642                CComPtr<IRunningObjectTable> pRunningObjectTable;
    618                 ATLCHECK(GetRunningObjectTable(0, &pRunningObjectTable));
    619                 ATLCHECK(pRunningObjectTable->Revoke(nCookie));
    620         }
    621 };
    622 
    623 template <typename _Handler = CRunningObjectActiveObjectHandler>
     643                __C(GetRunningObjectTable(0, &pRunningObjectTable));
     644                __C(pRunningObjectTable->Revoke(nCookie));
     645        }
     646};
     647
     648template <typename CHandler = CRunningObjectActiveObjectHandler>
    624649class CActiveObjectT :
    625         protected _Handler
     650        protected CHandler
    626651{
    627652private:
    628         DWORD m_nCookie;                // Active object identifier
     653        DWORD m_nCookie;
    629654
    630655public:
    631656// CActiveObjectT
    632         CActiveObjectT() throw() :
     657        CActiveObjectT() :
    633658                m_nCookie(0)
    634659        {
    635660        }
    636         ~CActiveObjectT() throw()
     661        ~CActiveObjectT()
    637662        {
    638663                _ATLTRY
     
    645670                }
    646671        }
    647         DWORD GetCookie() const throw()
     672        DWORD GetCookie() const
    648673        {
    649674                return m_nCookie;
    650675        }
     676        BOOL IsRegistered() const
     677        {
     678                return GetCookie() != 0;
     679        }
    651680        VOID Register(IUnknown* pUnknown, const CLSID& ClassIdentifier, DWORD nFlags = ACTIVEOBJECT_STRONG)
    652681        {
    653                 ATLASSERT(m_nCookie == 0);
     682                _A(m_nCookie == 0);
    654683                m_nCookie = RegisterActiveObject(pUnknown, ClassIdentifier, nFlags);
    655                 ATLASSERT(m_nCookie);
     684                _A(m_nCookie);
    656685        }
    657686        VOID Unregister()
    658687        {
    659                 if(m_nCookie)
    660                 {
    661                         RevokeActiveObject(m_nCookie);
    662                         m_nCookie = 0;
    663                 }
     688                if(!m_nCookie)
     689                        return;
     690                RevokeActiveObject(m_nCookie);
     691                m_nCookie = 0;
    664692        }
    665693};
Note: See TracChangeset for help on using the changeset viewer.