我用vb做了个dll,版本为1。00,打包安装后可正常运行。后来经修改后编译为2。00,打包安装在另一个目录下,结构新的可正常运行,先前安装的却运行不了,出来"Class doesn't support Automation "的提示,请教高人如何解决这个问题。

解决方案 »

  1.   

    如果你在新的DLL中没有说明(主要是一些调用方法)如何处理旧的DLL的话.当你用新的DLL去代码旧的DLL(而原来引用旧的DLL的程序会出现错误.)
      

  2.   

    DLL 地狱(DLL Hell)是用于描述当与动态链接库(DLLs)协同作用时引起的并发问题的一个短语。DLL Hell 在微软 Windows 操作系统中包含管理动态链接库(DLLs)的困难,例如 DLL 版本间的冲突,在获取需要的 DLLs 和进行很多必要的 DLL 拷贝时的困难。DLL 地狱是潜在的操作系统设计缺陷的一个例子-就是,问题发生在书写良好的程序上因为坏的程序设计实践或能够被操作系统容忍的书写不好的软件的一个 bug 。潜在的操作系统缺陷的范例是在微软操作系统 pre-dating OS2 和 Windows NT 中的时间片复用。有了时间片复用、一个无赖或 buggy 程序能够有效地使整个计算机丧失功能,强迫用户硬启动这台机器。
    更多的内容可以搜索这方面的相关知识
      

  3.   

    在编译新的DLL的时候可以:
    Project菜单->Project Properties...->Componet->Version Compatibility选择Binary Compatibility,然后下面的文本框当中输入或者选择原来的DLL。
      

  4.   

    问题补充:用regsvr32重新注册旧的dll后,旧的可以,但新的又不行了,两者就是水火不容啊,真是头大。
      

  5.   

    你的函数名称和Project名称不能相同,否则只能在新的DLL当中包含所有旧的代码,以及实现过程,然后按上面的操作,可以让旧的程序也可以使用新的DLL。
      

  6.   

    按照一般规则,动态库应该保证向下兼容,即只要注册了 2.0 的 dll 就能调用 1.0 的接口。而楼主明显是要求 2.0 和 1.0 必须独立的。
    所以:
    ·将 1.0 和 2.0 的 dll 全部注销
    ·对 1.0 和 2.0 的源代码(应该是相互独立的吧)各自独立做如下操做
     ○两个工程的库名(工程名)必须不同
     ○删除已生成的 dll
     ○先不用二进制兼容,重新生成一个 dll
     ○用新的 dll 作为该版本的二进制兼容标准
    这样生成的两个版本的 dll 在 tlbinfo 中实际上没有任何关联,完全是两个独立的 dll,所以可以并存使用。
      

  7.   


    经 save as 重新命名主程序和DLL,工程属性里的名称也全改了,编译时也改了相应的执行文件名称,再重新打包,还是不行啊。是不是DLL里的所有函数名称都要改名啊?
      

  8.   


    好象还是有问题。最后我找了台从未注册过该DLL的干净机子,重新编译打包才OK。