c – 为什么通过同一COM对象的不同接口检索的IUnknown *指针具有
发布时间:2020-12-16 09:34:12 所属栏目:百科 来源:网络整理
导读:我有以下COM接口层次结构和一个实现它们的类: interface IX : public IUnknown{};interface IY : public IUnknown{};class CA: public IX,public IY{}; 这里的类CA有效地继承了IUnknown两次. 我们知道CA类中有两个vtable指针 – 一个指向IX,另一个指向IY.因
我有以下COM接口层次结构和一个实现它们的类:
interface IX : public IUnknown{}; interface IY : public IUnknown{}; class CA: public IX,public IY{}; 这里的类CA有效地继承了IUnknown两次. 我们知道CA类中有两个vtable指针 – 一个指向IX,另一个指向IY.因此,存储在IX子对象中的IUnknown与存储在IY子对象中的IUnknown不同. 然而,当我们在同一个对象上调用IX :: QueryInterface()或IY :: QueryInterface()并查询IUnknown时,我们得到相同的IUnknown *指针. 为什么会这样? 解决方法
这就是所谓的
“object identity” requirement,它指出每当你从两个对象请求IUnknown时,如果那些是不同的对象,那么你会得到不同的指针,如果它是相同的对象则是相同的指针.
每个QueryInterface()实现都必须满足此要求.这通常是在choosing which one HRESULT CA::QueryInterface( REFIID iid,void** ppv ) { if( iid == __uuidof( IUnknown ) ) { // Explicitly cast to one of base class subobjects. // Doesn't matter which one is chosen - it just has to be // the same base class subobject each time IUnknown is requested. IUnknown* selected = static_cast<IX*>( this ); *ppv = selected; AddRef(); return S_OK; } else { continue for other interfaces } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 这种修改过的C#单例模式是一种很好的做法吗?
- Swift: print() vs println() vs NSLog()
- NSJSONSerialization 反序列化失败
- ruby-on-rails – Ruby Gem和Rails插件有什么区别?
- c# – Web.GetFileByServerRelativeUrl throws“值不在预期
- c – OpenCV:如何计算max(R,G,B)
- Autoincrement In SQLite
- ruby-on-rails – 如果没有路由匹配,则重定向到根页面
- 工作记录:不定宽度展开收起卡片
- fastjson jsonobject 转javaobject报错java.lang.VerifyErr