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

Microsoft修补程序958369 MS08-070破坏了我的VB6应用程序(类型不匹配-动态创建的控件),vb6,winsock,Vb6,Winsock,我们使用上面列出的microsoft修补程序升级了我们的计算机,现在有些winsock控件出现问题。在谈到新的组件库时,我们面临两个问题: 我们正在使用Form.Controls.Add(…)动态创建Winsock控件。对于新的DLL,它给了我们一个运行时错误731,说明我们需要添加许可证 此问题通过在添加控件之前添加line License.Add(控件的PrgID)来解决 现在的问题是,当我们尝试将此控件设置为mWinsock类型的对象时,会出现运行时错误类型不匹配。有什么想法吗?您可能

我们使用上面列出的microsoft修补程序升级了我们的计算机,现在有些winsock控件出现问题。在谈到新的组件库时,我们面临两个问题:

  • 我们正在使用Form.Controls.Add(…)动态创建Winsock控件。对于新的DLL,它给了我们一个运行时错误731,说明我们需要添加许可证
此问题通过在添加控件之前添加line License.Add(控件的PrgID)来解决


现在的问题是,当我们尝试将此控件设置为mWinsock类型的对象时,会出现运行时错误类型不匹配。有什么想法吗?

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


由于引用VB可能不具备在运行时解析控件的方法和属性所需的所有信息

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

当然,如果更简单的话,您总是可以将引用声明为“对象”,但是您的性能会有所下降,并且您将失去对WithEvents的支持。请参阅“Visual Basic 6.0 Service Pack 6运行时扩展文件的累积更新汇总说明”

此2008年12月30日更新应删除并替换有故障的12月9日安全更新。它似乎同时处理926857和957924


958369似乎是针对同一错误更新(12月9日)的VisualFoxproKB文章。VFP使用许多VB控件。

在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

有关更多信息,请参阅。

哪些组件库的接口发生了更改?我已经通过将MSI解包到一个文件夹中,然后在不更改EXE清单中的任何接口信息的情况下,手动复制Reg Free COM包中的原始库,对其中一些库进行了测试。到目前为止,所有的工作都没有任何改变。根据OP,Winsock OCX接口已经改变。我不确定它到底是如何变化的,但是可以通过从两个版本中提取类型库并比较它们来发现。