• <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 閱讀(2358) 評論(0)  編輯 收藏 引用 所屬分類: COM

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

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            編程與開源

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            www.久久热| 中文字幕精品无码久久久久久3D日动漫 | 国产精品一久久香蕉产线看| 色综合久久久久久久久五月| 久久综合中文字幕| 欧美成人免费观看久久| 99久久国产宗和精品1上映| 久久99精品国产麻豆| 99久久夜色精品国产网站| 久久亚洲中文字幕精品一区| 亚洲AV无码1区2区久久 | 亚洲精品乱码久久久久66| 久久99国产精品久久99| 亚洲精品无码久久久| 国内精品久久久久| 久久综合久久综合亚洲| 青青国产成人久久91网| 亚洲综合伊人久久大杳蕉| 久久久久亚洲AV成人网人人软件| 久久久久国产精品熟女影院| 伊人久久精品影院| 久久精品国产精品亚洲| 99久久久国产精品免费无卡顿| 久久99国产精品久久99小说| 国产免费久久久久久无码| 久久精品九九亚洲精品| 一本一道久久综合狠狠老| 久久午夜福利电影| 国产成人久久777777| 久久国产热精品波多野结衣AV| 久久SE精品一区二区| 久久人与动人物a级毛片| 久久久精品久久久久久| 999久久久国产精品| 91精品国产高清久久久久久91| 精品国产乱码久久久久久1区2区| 亚洲午夜久久久影院| 一本色道久久HEZYO无码| 狠狠色丁香久久婷婷综合图片| 日韩十八禁一区二区久久| 久久久久久午夜精品|