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

时间:2008-12-18 00:05:08

标签: vb6 winsock

我们使用上面列出的微软补丁升级了我们的计算机,现在遇到了一些winsock控件的问题。在继续使用新组件库时,我们遇到了两个问题:

  • 我们正在使用Form.Controls.Add(...)动态创建一个Winsock控件。使用新的dll,它给我们一个运行时错误731,说明我们需要添加许可证。

通过在添加控件之前添加一行License.Add(控件的PrgID)来解决此问题。

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

4 个答案:

答案 0 :(得分:2)

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

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

2008年12月30日更新应删除并替换错误的Dec 9安全更新。它似乎涉及926857和957924。

958369似乎是针对相同错误更新(12月9日)的Visual FoxPro知识库文章。 VFP使用许多VB控件。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

由于界面签名已更改,您必须从项目中删除组件引用,完全保存并关闭VB6,取消注册旧控件,从修补程序注册新版本,重新打开项目并重新添加组件如果你这样做,你很可能会失去对没有安装补丁的机器的支持(或者你必须将它作为安装包的一部分安装)

当然,你可以随时声明引用“As Object”,如果它更容易,但你的性能会下降一点,你将失去对WithEvents的支持

答案 3 :(得分: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

有关详细信息,请参阅this MSDN article