• <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 @ 2010-07-05 15:45 codeArt 閱讀(2361) | 評論 (0)編輯 收藏

            僅列出標題
            共3頁: 1 2 3 
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            編程與開源

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            精品久久人人做人人爽综合| 久久久无码精品亚洲日韩按摩 | 国产精品中文久久久久久久| 久久福利资源国产精品999| 亚洲国产精品无码久久久秋霞2| 狠狠久久亚洲欧美专区 | 亚洲乱码精品久久久久..| 久久久91精品国产一区二区三区 | 中文字幕无码免费久久| 91久久国产视频| 无码人妻久久一区二区三区免费丨 | 人妻无码αv中文字幕久久琪琪布| 久久超碰97人人做人人爱| 伊人久久成人成综合网222| 97久久超碰成人精品网站| 99蜜桃臀久久久欧美精品网站| 国内精品伊人久久久久网站| 久久99热只有频精品8| 囯产极品美女高潮无套久久久 | 伊人久久综合精品无码AV专区| 狠狠精品久久久无码中文字幕| 久久综合狠狠综合久久| 婷婷五月深深久久精品| 精品久久久久成人码免费动漫| 久久久WWW成人免费精品| 一本久久a久久精品综合夜夜 | 国内精品久久久久久久影视麻豆 | 99久久国产综合精品女同图片| 久久婷婷五月综合97色直播| 嫩草影院久久99| 中文字幕亚洲综合久久| 精品无码人妻久久久久久| 国产午夜精品久久久久九九电影| 国产成人精品久久一区二区三区av | 7777精品久久久大香线蕉 | 国产精品一区二区久久精品| 精品久久久噜噜噜久久久| 国产V亚洲V天堂无码久久久| 久久91精品国产91久久户| 伊人久久免费视频| 午夜肉伦伦影院久久精品免费看国产一区二区三区 |