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

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

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            編程與開(kāi)源

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品国产精品青草| 思思久久99热只有频精品66| 伊人久久大香线蕉亚洲| 亚洲国产精品无码久久| 97久久超碰国产精品2021| 亚洲精品国产成人99久久| 色综合久久天天综合| 99久久精品国产高清一区二区| 国产精品久久久香蕉| 久久久精品人妻无码专区不卡| 69久久夜色精品国产69| 久久综合久久综合亚洲| 国产免费久久精品丫丫| 一本伊大人香蕉久久网手机| 久久SE精品一区二区| 中文字幕日本人妻久久久免费| 亚洲日韩中文无码久久| AV无码久久久久不卡网站下载| 亚洲狠狠婷婷综合久久蜜芽| 久久人人爽人人爽人人片AV不 | 一本综合久久国产二区| 久久人人爽人人爽AV片| 久久综合久久美利坚合众国| 亚洲精品无码久久千人斩| 精品国产一区二区三区久久| 久久午夜羞羞影院免费观看| 7777精品久久久大香线蕉| 久久精品国产男包| 99久久精品国产一区二区| 欧美熟妇另类久久久久久不卡| 久久亚洲视频| 日本精品一区二区久久久| 久久久久久国产精品无码下载 | 久久久亚洲欧洲日产国码aⅴ| 亚洲精品美女久久久久99小说| 伊人久久免费视频| 久久综合丁香激情久久| 久久综合狠狠综合久久激情 | 香蕉久久一区二区不卡无毒影院| 久久91精品国产91久久户| 青青草原综合久久大伊人精品|