请问Com技术内幕上面说:QueryInterface返回里面返回的IUknown要总是一样,但是我想问的是
IX : public IUknown
IY : public IUknown
class CA : public IX, public IY
这里CA并不是虚拟继承,就是说CA里面有两个IUknown,那么到底返回哪一个呢,又如何保证返回的IUknown总是一样的呢?
另外一个问题是为什么不用虚拟继承?

解决方案 »

  1.   

    先将this指针转换为IX再转换为IUnknown,这样就不会有二义性了,呵呵
      

  2.   

    或者直接将指针转换为IX或者IY即可。
      

  3.   

    那么到底是转换为IX还是IY呢?还是说没有关系?
    为什么不直接用虚拟继承呢?这样就可以直接转换为IUnknow,岂不是更好?
      

  4.   

    IUnknown就那3个方法,你转换成IX或者IY都可以,但是COM要求你总是转到一个特定的地址。因为你IX,IY都是从IUnknonw继承来的,随便哪个都可以。使用虚拟继承在基类有数据变量的时侯才有明显利益,IUnknown本身没有任何数据成员,是一个纯抽象类,因此简单的使用多重继承更加方便。
      

  5.   

    那么到底是转换为IX还是IY呢?还是说没有关系?
    为什么不直接用虚拟继承呢?这样就可以直接转换为IUnknow,岂不是更好?
    ====================================================================
    转换成什么都没有关系的,只要符合COM标准就行了!
      

  6.   

    第一个问题已经弄明白了,但是第2个问题还有些困惑:
    为什么不用虚拟继承?是没有这个必要还是不能用?
    因为不用虚拟继承将导致CA中存在两套IUknown(即使IUnknown本身没有任何数据),这有必要么?不是容易引起问题么,那为什么不干脆就虚拟继承,这样这些问题不是都没有了么