• <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

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            編程與開源

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            jizzjizz国产精品久久| 精品水蜜桃久久久久久久| 亚洲AV无码久久精品成人| 亚洲国产欧美国产综合久久| 91视频国产91久久久| 人妻中文久久久久| 国产午夜精品久久久久免费视| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 亚洲精品乱码久久久久久中文字幕| 久久w5ww成w人免费| 久久久久无码专区亚洲av| 亚洲va久久久噜噜噜久久男同| 久久国产精品-久久精品| 久久精品国产久精国产果冻传媒| 国产精品美女久久久| 一本久久a久久精品vr综合| 韩国三级中文字幕hd久久精品 | 亚洲精品国产字幕久久不卡| 国产成人综合久久精品尤物| 亚洲综合熟女久久久30p| 久久天天躁狠狠躁夜夜2020| 久久亚洲精品中文字幕| 热综合一本伊人久久精品| 91久久精品电影| 国产亚洲美女精品久久久久狼| 久久久久亚洲av成人网人人软件 | 国产精品一区二区久久精品涩爱| 青青草国产成人久久91网| 久久精品国产亚洲AV无码麻豆| 中文精品99久久国产 | 久久久精品人妻一区二区三区蜜桃| 亚洲精品无码久久久| 久久中文精品无码中文字幕| 国产亚州精品女人久久久久久 | 国产精品久久久久乳精品爆| 国产美女久久久| 伊人久久精品线影院| 久久亚洲AV永久无码精品| 香港aa三级久久三级老师2021国产三级精品三级在 | 欧美午夜精品久久久久久浪潮| 久久se精品一区二区影院|