编译一个组件 与前一个版本的组件binary兼容
但老是版本不兼容
弹出一个 breack compatibity的选项
preserve compatibity变灰 不可选怎么才能做到版本兼容 
至少preserve compatibity可选请各位高手 讲讲原理  帮帮忙  我现在要做到版本兼容

解决方案 »

  1.   

    这就是所谓的DLL Hell吧
    如果接口改变了,就不可能保持兼容,比如函数参数发生了变化
    重新编译后所有使用者必须重新引用
      

  2.   

    肯定是接口变了。下面的方法能够比较快地找出变化
    1.将原先的 DLL 备份一下,用中断兼容的方式编译一下
    2.用 Visual Studio 的工具 OLE Viewer 的 View TypeLib 功能分别打开两个 DLL,保存为 IDL 文件
    3.用文本比较工具比较两个 IDL 文件
      

  3.   

    我只有上一个版本的dll文件,还有经过一些修改的原代码。
    我想问能不能通过修改原代码的类接口,做到跟以前版本binary兼容。
      

  4.   

    to Tiger_Zhao(VB老鸟):
    看来Tiger_Zhao(VB老鸟)大哥对这个很了解,我怎么样才能修改原代码的类接口,做到跟以前版本binary兼容。因为我要发不做到兼容的话,原来系统很多功能都不可用了。
      

  5.   

    兼容报错:
    Original definition: 现有:Implements CData2Original definition:
     Function InsertCell(a_Style As DataEXT.CellStyle) As DataEXT.CCellCurrent definition:
     Function InsertCell(a_Style As CellStyle) As CCellOriginal definition:
     Public Form As DataEXT.CFormCurrent definition:
     Public Form As CForm
    Original definition:
     Property Set Form(ByVal RHS As DataEXT.CForm)Current definition:
     Public Form As CFormOriginal definition:
     Public Form As DataEXT.CFormCurrent definition:
     Public Form As CForm
    Original definition:
     Property Set Form(ByVal RHS As DataEXT.CForm)Current definition:
     Public Form As CForm
    从上面的报警来看,确实是接口不一致,
      

  6.   

    兼容报错:
    Original definition:
    Implements CData2___v0
     现有:Implements CData2Original definition:
     Function InsertCell(a_Style As DataEXT.CellStyle) As DataEXT.CCellCurrent definition:
     Function InsertCell(a_Style As CellStyle) As CCellOriginal definition:
     Public Form As DataEXT.CFormCurrent definition:
     Public Form As CForm
    Original definition:
     Property Set Form(ByVal RHS As DataEXT.CForm)Current definition:
     Public Form As CFormOriginal definition:
     Public Form As DataEXT.CFormCurrent definition:
     Public Form As CForm
    Original definition:
     Property Set Form(ByVal RHS As DataEXT.CForm)Current definition:
     Public Form As CForm
    从上面的报警来看,确实是接口不一致,但是前一个版本不可能是Implements CData2___v0的,
    也应该是Implements CData2。
    就算我把原来的接口改为跟现在报错的一样,也会出现如下的报错:
    Original definition:
     
     Function InsertCell(a_Style As DataEXT.CellStyle) As DataEXT.CCell
    Current definition:
     Function InsertCell(a_Style As DataEXT.CellStyle) As DataEXT.CCell我不明白,现在接口应该一样了,为什么还会出错,难道是因为它们的clsid不一样,那应该怎么样做
    才能使它们的clsid一样呢。
      

  7.   

    今天找了一个VBSP6的补丁,给打的SP5的中文版VB打上去,发现preserve compatibity终于不再变灰了。然而我在一个打SP5的英文版上编辑上也能同时使preserve compatibity不再变灰,我不知道是什么原因,难道是VB的bug吗
      

  8.   

    问题解决了就好,VB经常出现莫名其妙的兼容性错误
    在DLL一大把的项目中造成的麻烦很多