拥有两个不同版本的DLL会导致问题吗?

拥有两个不同版本的DLL会导致问题吗?,dll,vb6,Dll,Vb6,我有一个vb6程序,需要使用MSOLAP80.dll来正确显示其透视表。但是由于MSOLAP90.dll与此有一些兼容性问题,我无法使用MSOLAP90.dll,并且仍然显示透视表 我已经注册了MSOLAP90.dll,然后又注册了MSOLAP80.dll,一切似乎都很好。但是,我不知道这两个文件是否都已注册,或者MSOLAP80.dll是否是唯一注册的文件,因为对于MSOLAP90.dll中的新内容,我没有参考点。是否可能两者都已注册且程序仅使用MSOLAP80.dll,如果有程序需要MSOL

我有一个vb6程序,需要使用MSOLAP80.dll来正确显示其透视表。但是由于MSOLAP90.dll与此有一些兼容性问题,我无法使用MSOLAP90.dll,并且仍然显示透视表

我已经注册了MSOLAP90.dll,然后又注册了MSOLAP80.dll,一切似乎都很好。但是,我不知道这两个文件是否都已注册,或者MSOLAP80.dll是否是唯一注册的文件,因为对于MSOLAP90.dll中的新内容,我没有参考点。是否可能两者都已注册且程序仅使用MSOLAP80.dll,如果有程序需要MSOLAP90.dll,则它将知道如何使用该程序


我想我只是对如何注册DLL的工作以及是否有可能同时注册这两个DLL感到困惑。有人能帮你解释一下吗?

如果你想确定哪一个已经注册,你可以:

  • 查看与DLL路径匹配的类型库的引用对话框
  • 打开RegEdit,搜索MSOLAP80.DLL或MSOLAP90.DLL(取消选中“仅匹配整个字符串”)
如果您找到两个DLL的引用,那么您是安全的,因为您可以绑定到特定版本。如果发现对错误DLL的引用,请取消注册错误的DLL,然后注册正确的DLL

COM originall在任何时候都只允许一组CLSID(唯一标识类)和IID(唯一标识类接口)的一个版本。一个LIBID可以有多个引用(标识一个类型库-嵌入在DLLL中的资源),但它们必须有不同的版本

从Windows XP开始,可以并行访问DLL,其中可执行文件可以访问特定版本的DLL,覆盖注册表中的值。您需要在EXE文件所在的文件夹中嵌入或拥有.manifest文件

不幸的是,这方面的文档似乎已从MSDN中消失,仅在几篇知识库文章中提及:


这取决于DLL及其实现方式。本质上,对象将使用最后注册的对象创建。如果您只使用8.0版本的对象,那么它们将只来自DLL的8版本。如果您使用9.0版本的对象,它可能会尝试从90 dll加载它,或者完全失败。我的程序只使用8版本的对象,但我很好奇这两个对象是否也会影响其他程序?注册dll而不重新编译您的程序表明这些dll使用相同的GUID。这是一个问题,您很可能会破坏任何需要msolap90.dll才能正常工作的程序。这种古老的代码最好在虚拟机中运行。