我试图创建另一个ActiveX实例的ActiveX DLL,结果令人困惑,看似不一致。
在我们重建整个代码库之前,所有工作都有效,这是自几年前以来从未做过的事情。我们之前刚刚根据需要制作了作品。
问题出现在多个地方,但这是一个代表性的例子:
Dim objMid As MiddlePiece.clsMyClass
Set objMid = CreateObject("MiddlePiece.clsMyClass")
这是在CreateObject
行上遇到错误(48:加载DLL时出错)。我尝试改变代码并得出以下结果。
Dim objMid As MiddlePiece.clsMyClass
Set objMid = New MiddlePiece.clsMyClass
再次给我错误48。
Dim objMid As Object
Set objMid = New MiddlePiece.clsMyClass
这也给出了错误48。
Dim objMid As Object
Set objMid = CreateObject("MiddlePiece.clsMyClass")
那个实际上有效。
任何人都可以解释这些之间真正的区别是什么,以及为什么现在只有最后一个有效,而至少第一个工作之前呢?
我想我理解早期和晚期绑定之间的区别,并且只有最后一个示例是后期绑定的实例,但我已经检查并确认在构建PC和测试机器上,注册表包含相同版本的MiddlePiece.dll,所以我不清楚为什么会失败。
问题似乎源于MiddlePiece.dll是使用Microsoft ActiveX Data Objects构建的。自从我们从Windows XP迁移到Windows 7以来,已经出现了许多与此相关的问题.msado26.tlb库不再适用于我们,因此我们必须更改对该库的引用以引用msado60_Backcompat.tlb。这似乎工作了一段时间,但我们已经有两个不同版本的msado15.dll更麻烦。最新版本破坏了VB6和C ++中的代码。
答案 0 :(得分:0)
我们用对msado26.tlb的引用替换了对msado60_backcompat.tlb的所有引用,基本上撤消了我们大约两年前转换到Windows 7时首次实现的“修复”。这基本上都归功于微软引入的问题。研究该问题的良好起点,对于那些关心的人来说是here.这使我们能够重建Windows 7计算机上的所有内容并解决多个问题。