標準Com接口

IUnknow

1、爲一個組件用戶提供一種標準途徑,通過該途徑,用戶可以在指定的組件裏要求使用一個特定的接口。QueryInterface可以完成該功能。

2、幫組組件在生存期內進行管理。IUnknown提供兩種方法:AffRef和Release。在組件實例裏進行生存期方面的管理。

        IUnknown
        {
        public:
            BEGIN_INTERFACE
            virtual HRESULT STDMETHODCALLTYPE QueryInterface(
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject) = 0;

            virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;

            virtual ULONG STDMETHODCALLTYPE Release( void) = 0;

            template<class Q>
            HRESULT
#ifdef _M_CEE_PURE
            __clrcall
#else
            STDMETHODCALLTYPE
#endif
            QueryInterface(Q** pp)
            {
                return QueryInterface(__uuidof(Q), (void **)pp);
            }

            END_INTERFACE
        };

 

組件用戶不能直接刪除我們的C++實例,這是因爲用戶只有一個指向C++ Vtable的指針。事實上,由於其他的客戶端可能正在訪問相同的一個組件對象,所以某一個客戶也不應該試圖刪除該對象。只有組件自己可以根據內部的引用計數器來決定自己是否應該被刪除。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章