但是据我了解,COM在内存中的结构和C++的纯虚函数是一样的,对于一个C++的纯虚类来说,各成员函数的说明位置会影响类的VTable。COM就不会吗?

解决方案 »

  1.   

    恐怕并非如此.
    两个工程生成的两个不同的COM有不同的QueryInterface.这两个QueryInterface恐怕不允许你混用两个接口.可能你必须使用原定义的接口得到接口指针,然后强行类型转换到另一个接口指针.但这是相当危险的.
    另外:两个接口如果仅仅是虚函数及其参数相同,并不能认为是一致的.应为如果接口之间发生了继承等关系时,即使其他程序看来接口的虚函数表里的所有表象都一样,但实质上是不同的.
    interface A
    {
     X();
    };interface B : A
    {
     Y();
    };interface C
    {
     X();
     Y();
    };C与B的虚函数表看来是一样的,担不是相同的接口.
    个人意见,仅供参考
      

  2.   

    申明,以上意见针对hesoft(生活在只有三条街的城市) 的意见
      

  3.   

    再问:如果两个工程中的两个interface如下
     interface A()
    {
    X();
    Y();
    };
    interface B()
    {
    Y();
    X();
    };
    另外,在这两个工程中,除以上的不同和CLS_ID, IID不同外,其它一切都相同的话,两个COM能互相替代吗?BTW: 我决定把这个问题的分提高到150(另开贴给分),因为我觉得这个问题值得研究,如果必要我还要提,欢迎COM高手来解惑
      

  4.   

    我用Atl写了一个简单的COM组件,并在VB下测试过了。结果是:Interface中的申明的顺序不影响COM。
    给分!
      

  5.   

    补充说明:用IDispatch接口无影响,但使用定制接口时,是有影响的
      

  6.   

    去更改一个COM,不如从新去作一个
    因为那样做是看起来很明智,但实际上是让人受罪!
    参考《深入浅出MFC》