哪位看过此书的高手请指点我一下,根据书上讲的,在外部对象的Init()函数中,创建内部对象时会传递一个IUnkown的接口,根据他的代码返回值应该是非委托的IUnkown的接口指针。而这个非委托的IUnkown的接口没有QueryInterface()而只有NondelegationQueryInterface()。即使调用委托IUnkown接口的QueryInterface(),也只能返回外部函数的IUnkown指针的函数。
总之,我觉得外部对象的QueryInterface()中对内部对象接口的查询该用NondelegationQueryInterface()。
语无伦次,请见谅。
总之,我觉得外部对象的QueryInterface()中对内部对象接口的查询该用NondelegationQueryInterface()。
语无伦次,请见谅。
INondelegationUnknown和IUnknown是相同定义的
并且是用同一个IID
因为COM不是通过类名来识别接口,而是通过vtable来调用接口成员函数
可以看出INondelegationUnknown和IUnknown的vtable是一样的
所以pUnknownInner只需要定义为IUnknown*就行了
当然如果你将pUnknownInner定义为INondelegationUnknown*也可以
这样的话,就会像你所说的必须用NondelegationQueryInterface而不是QueryInterface()
这样有失一般性,
另外INondelegationUnknown和IUnknown对编译器来说不会引起向上类型转换的混乱,如果用嵌套类的方法实现委托和非委托IUnknown接口的话就不必用不同名字来区别。