• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            codeArt

            codeArt

            BEGIN_COM_MAP和END_COM_MAP

              1 #define BEGIN_COM_MAP(x) public: \
              2     typedef x _ComMapClass; \
              3     static HRESULT WINAPI _Cache(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw) throw()\
              4 {\
              5     _ComMapClass* p = (_ComMapClass*)pv;\
              6     p->Lock();\
              7     HRESULT hRes = E_FAIL; \
              8     __try \
              9 { \
             10     hRes = ATL::CComObjectRootBase::_Cache(pv, iid, ppvObject, dw);\
             11 } \
             12     __finally \
             13 { \
             14     p->Unlock();\
             15 } \
             16     return hRes;\
             17 }\
             18     IUnknown* _GetRawUnknown() throw() \
             19 { ATLASSERT(_GetEntries()[0].pFunc == _ATL_SIMPLEMAPENTRY); return (IUnknown*)((INT_PTR)this+_GetEntries()->dw); } \
             20     _ATL_DECLARE_GET_UNKNOWN(x)\
             21     HRESULT _InternalQueryInterface(REFIID iid, void** ppvObject) throw() \
             22 return InternalQueryInterface(this, _GetEntries(), iid, ppvObject); } \
             23     const static ATL::_ATL_INTMAP_ENTRY* WINAPI _GetEntries() throw() { \
             24     static const ATL::_ATL_INTMAP_ENTRY _entries[] = { DEBUG_QI_ENTRY(x)
             25 
             26 #ifdef _ATL_DEBUG
             27 #define DEBUG_QI_ENTRY(x) \
             28 {NULL, \
             29     (DWORD_PTR)_T(#x), \
             30     (ATL::_ATL_CREATORARGFUNC*)0},
             31 #else
             32 #define DEBUG_QI_ENTRY(x)
             33 #endif //_ATL_DEBUG
             34 
             35 #define COM_INTERFACE_ENTRY_IMPL(x)\
             36     COM_INTERFACE_ENTRY_IID(_ATL_IIDOF(x), x##Impl<_ComMapClass>)
             37 
             38 #define _ATL_IIDOF(x) __uuidof(x)
             39 
             40 #define COM_INTERFACE_ENTRY_IID(iid, x)\
             41 {&iid,\
             42     offsetofclass(x, _ComMapClass),\
             43     _ATL_SIMPLEMAPENTRY},
             44 
             45 #define offsetofclass(base, derived) ((DWORD_PTR)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)
             46 
             47 #define _ATL_SIMPLEMAPENTRY ((ATL::_ATL_CREATORARGFUNC*)1)
             48 
             49 #define COM_INTERFACE_ENTRY(x)\
             50 {&_ATL_IIDOF(x), \
             51     offsetofclass(x, _ComMapClass), \
             52     _ATL_SIMPLEMAPENTRY},
             53 
             54 #define END_COM_MAP() \
             55     __if_exists(_GetAttrEntries) {{NULL, (DWORD_PTR)_GetAttrEntries, _ChainAttr }, }\
             56 {NULL, 00}}; return &_entries[1];} \
             57     virtual ULONG STDMETHODCALLTYPE AddRef( voidthrow() = 0; \
             58     virtual ULONG STDMETHODCALLTYPE Release( voidthrow() = 0; \
             59     STDMETHOD(QueryInterface)(REFIID, void**throw() = 0;
             60 #else
             61 #define END_COM_MAP() \
             62     __if_exists(_GetAttrEntries) {{NULL, (DWORD_PTR)_GetAttrEntries, _ChainAttr }, }\
             63 {NULL, 00}}; return _entries;} \
             64     virtual ULONG STDMETHODCALLTYPE AddRef( voidthrow() = 0; \
             65     virtual ULONG STDMETHODCALLTYPE Release( voidthrow() = 0; \
             66     STDMETHOD(QueryInterface)(REFIID, void**throw() = 0;
             67 #endif // _ATL_DEBUG
             68 
             69 
             70 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
             71 class d
             72 {
             73 public:
             74     d(){}
             75     typedef x _ComMapClass;
             76     static HRESULT WINAPI _Cache(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw) throw()\
             77     {
             78         _ComMapClass* p = (_ComMapClass*)pv;
             79         p->Lock();
             80         HRESULT hRes = E_FAIL;
             81         __try
             82         {
             83             hRes = ATL::CComObjectRootBase::_Cache(pv, iid, ppvObject, dw);
             84         }
             85         __finally
             86         {
             87             p->Unlock();
             88         }
             89         return hRes;
             90     }
             91     IUnknown* _GetRawUnknown() throw()
             92     { ATLASSERT(_GetEntries()[0].pFunc == _ATL_SIMPLEMAPENTRY); return (IUnknown*)((INT_PTR)this+_GetEntries()->dw); }
             93     _ATL_DECLARE_GET_UNKNOWN(x)
             94         HRESULT _InternalQueryInterface(REFIID iid, void** ppvObject) throw()
             95     { return InternalQueryInterface(this, _GetEntries(), iid, ppvObject); }
             96     const static ATL::_ATL_INTMAP_ENTRY* WINAPI _GetEntries() throw()
             97     {
             98         static const ATL::_ATL_INTMAP_ENTRY _entries[] =
             99         {
            100             {NULL, (DWORD_PTR)_T(#x), (ATL::_ATL_CREATORARGFUNC*)0},
            101             {&iid, ((DWORD_PTR)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING), ((ATL::_ATL_CREATORARGFUNC*)1)},
            102             {&__uuidof(x), ((DWORD_PTR)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING), ((ATL::_ATL_CREATORARGFUNC*)1)},
            103             __if_exists(_GetAttrEntries) {{NULL, (DWORD_PTR)_GetAttrEntries, _ChainAttr }, }
            104             {NULL, 00}
            105         };
            106         return &_entries[1];
            107     }
            108     virtual ULONG STDMETHODCALLTYPE AddRef( voidthrow() = 0;
            109     virtual ULONG STDMETHODCALLTYPE Release( voidthrow() = 0;
            110     STDMETHOD(QueryInterface)(REFIID, void**throw() = 0;
            111 }

            posted on 2010-07-05 15:45 codeArt 閱讀(2361) 評論(0)  編輯 收藏 引用 所屬分類: COM

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            編程與開源

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            一本大道久久a久久精品综合| 久久久久18| 亚洲精品高清国产一久久| 色婷婷综合久久久久中文字幕| 99精品国产综合久久久久五月天 | 成人精品一区二区久久久| 伊人色综合久久天天网| 久久精品国产精品青草app| 国产精品久久久久a影院| 99精品久久精品| 国产香蕉久久精品综合网| 色综合久久精品中文字幕首页| 久久只有这精品99| 伊人久久综在合线亚洲2019 | 久久久噜噜噜www成人网| 蜜臀久久99精品久久久久久| 99久久无码一区人妻a黑| 亚洲国产另类久久久精品黑人| 久久久久国产一区二区| 99久久这里只有精品| 久久久久亚洲av无码专区导航| 亚洲国产成人久久综合一区77| 成人国内精品久久久久影院VR| 国产69精品久久久久777| 久久久久亚洲AV片无码下载蜜桃| 狠狠色丁香久久婷婷综合图片| 国内精品久久久久久久亚洲| 草草久久久无码国产专区| 久久精品草草草| 久久亚洲高清观看| 狠狠色丁香久久婷婷综| 国内精品久久久久影院一蜜桃| 久久久久久无码Av成人影院| 午夜精品久久久久久久久| 中文国产成人精品久久不卡| 久久久久青草线蕉综合超碰| 一本色综合久久| 亚洲国产精品无码久久久不卡 | 性欧美大战久久久久久久| 久久久久九国产精品| 亚洲午夜久久久|