微软补丁958369 MS08-070破坏了我的VB6应用程序(类型不匹配 - 动态创建控件)

6
我们升级了机器,并安装了上述的微软补丁,现在我们在一些Winsock控件上遇到了问题。在转向新的组件库时,我们面临了两个问题:
- 我们使用Form.Controls.Add(...)动态创建Winsock控件。使用新的dll文件时,它会给我们一个运行时错误731,指出我们需要添加许可证。 - 这个问题通过在添加控件之前添加一行License.Add(PrgID of the control)来解决。
现在的问题是,当我们尝试将此控件设置为mWinsock类型的对象时,会出现类型不匹配的运行时错误。有什么想法吗?
4个回答

2
请查看“Visual Basic 6.0 Service Pack 6运行时扩展文件的累积更新汇总描述”。

http://support.microsoft.com/kb/957924/

这个2008年12月30日的更新应该移除并替换有问题的12月9日安全更新。它似乎涉及926857和957924两个方面。
958369似乎是一个Visual FoxPro KB文章,针对同样有问题的更新(12月9日)。VFP使用许多VB控件。

1

您可能需要将控件添加到工具箱中,以便VB6项目和窗体有一个正确的引用。 即使在设计时实际上没有它,您也需要这样做。

使用引用,VB可能无法在运行时解析控件的方法和属性所需的所有信息。


0

由于接口签名已更改,您将需要从项目中删除组件引用,完全保存和关闭VB6,注销旧控件,从补丁中注册新版本,重新打开您的项目并添加组件。如果这样做,您很可能会失去未安装补丁的机器的支持(或者您将不得不将其作为安装包的一部分安装)

当然,如果更容易,您可以始终声明引用“作为对象”,但性能会略有下降,并且您将失去对WithEvents的支持


哪些组件库有接口更改?我通过将MSI解压缩到文件夹中,然后手动将新库复制到Reg-Free COM包中的原始库上而不更改EXE清单中的任何接口信息来测试了其中的一些。 到目前为止,所有工作都没有任何变化。 - Bob
根据原帖所述,Winsock OCX接口已经改变。我不确定它如何改变,但可以通过提取两个版本的类型库并进行比较来找出答案。 - rpetrich

0

当我在VB6中动态创建非内置控件时,遇到了类似的问题。也许Winsock不再被认为是内置的。请尝试将变量声明为VBControlExtender而不是Winsock,如下所示:

Option Explicit
Dim WithEvents objExt As VBControlExtender

Private Sub LoadControl()
   Licenses.Add "MSWinsockLib.Winsock", "xydsfasfjewfe"
   Set objExt = Controls.Add("MSWinsockLib.Winsock", "myCtl")
End Sub

Private Sub extObj_ObjectEvent(Info As EventInfo)
   ' Program the events of the control using Select Case.
   Select Case Info.Name
     Case "DataArrival"
       ' Do stuff
   End Select
End Sub

请参阅此MSDN文章以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接