我不太明白com的二进制问题是一个什么样的要求,我觉得如果在一个接口上增加一个方法,那么这个接口的内存布局就是虚函数表多了一项,老版本调用新版本应该没问题吧?
为什么这样不符合com的二进制兼容

解决方案 »

  1.   

    com二进制兼容一般要求接口不变,而只改变实现,新增接口有时候在某些语言的调用上会出现一些不兼容的问题,但是在C++中应该不会出现问题。
      

  2.   

    啊?这样不是和一般dll没啥区别了嘛
      

  3.   

    应该不是增加一个方法在原有接口, 而是新增加一个接口继承自老接口,这样原来的客户程序可以使用老接口不受影响, 而新的客户可以通过QueryInterface获得新的接口, 从而得到新的服务
      

  4.   

    DLL没有严格的版本控制,在更新了一个接口的情况下,原有程序无法使用老版本的实现
    而COM是可以的,比如即使系统中是DX9.0c,你依然可以使用DX7的接口
      

  5.   

    谢谢楼上几位 
    不过我觉得大家没理解我的意思 
    我是指为什么com可以 dll不可以 老版本调用新版本的问题 如果是用增加一个方法而不是一个接口的方式 这不是和一般dll更新一样了
    而增加一个新接口的时候 是否应该是抛弃原来的老接口,然后新接口从老接口集成的方式 附和二进制兼容吗?最终的意思就是 什么是二进制兼容?