发表于:2003-5-10 17:09:00
回复pirate:
今天偶然逛这个china-pub时看到了你提的问题,也许在我给你回复时你已经搞清楚了,那就算我废话了。
我没有看过这本书,但对潘先生也是很敬仰。
这个问题应该这样理解:
HRESULT result = ::CoCreateInstance(CLSID_CompA,pUnknownOuter,CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)& m_pUnknownInner) ;
m_pUnknownInner为内部对象即CA的非委托IUnknown接口。
result = m_pUnknownInner-〉QueryInterface(IID_SomeInterface, (void **)&m_pSomeInterface);
m_pUnknownInner调用的为其非委托接口。
你一定惊讶为什么我说这里调用的是非委托接口。请注意,com并不关心接口乃至接口方法的名字是什么,它只关心vtbl的结构。尽管外部组件请求的是IUnknown类型,但被聚合对象返回的m_pUnknownInner指向的是INondelegationUnknown接口,这个接口只是被reinterpret成IUnknown,这个接口的vtbl有三个函数指针,第一个是NondelegationQueryinterface函数
指针,而当你调用m_pUnknownInner-〉Queryinterface
(...)时,它实际上调用的是m_pUnknownInner-〉NondelegationQueryinterface。因为com只知道
Queryinterface是IUnknown接口vtbl的第一个函数指针,而这个指针自然就是你在字面上看到的NondelegationQueryinterface。
回复
(
1条评论--

)
正在读取本评论的讨论,请稍侯……