2008-12-18 18 views
6

Actualizamos nuestras máquinas con un parche de microsoft mencionado anteriormente y ahora tenemos problemas con algunos controles de winsock. Al pasar a la nueva biblioteca de componentes hubo dos problemas que enfrentamos:Microsoft Patch 958369 MS08-070 rompió mi aplicación VB6 (No coincide el tipo - control creado dinámicamente)

  • Estamos creando un control Winsock de forma dinámica usando Form.Controls.Add (...). Con los nuevos dlls nos dio un error de tiempo de ejecución 731 indicando que necesitábamos agregar la licencia.

Este problema se resolvió agregando una línea License.Add (PrgID del control) antes de agregar el control.

Ahora el problema es cuando tratamos de configurar este control a un objeto de tipo mWinsock obtenemos un error de tiempo de ejecución Tipo No coincide. ¿Alguna idea?

Respuesta

1

Es posible que deba agregar el control a la caja de herramientas para que el proyecto y el formulario VB6 tengan una referencia adecuada. Tendrá que hacer esto incluso si no lo tiene en el formulario en el momento del diseño.

Con la VB referencia pueden no tener toda la información necesaria para resolver los métodos y propiedades del control en tiempo de ejecución

0

Dado que las firmas de la interfaz, han cambiado, tendrá que quitar la referencia de componente del proyecto , guarde y cierre VB6 por completo, anule el registro del control anterior, registre la nueva versión del parche, vuelva a abrir su proyecto y vuelva a agregar el componente. Si hace esto, es muy probable que pierda soporte para las máquinas que no tienen el parche instalado (o tendrá que instalarlo como parte de su paquete de instalación)

Por supuesto, siempre puede declarar la referencia "Como objeto" si es más fácil pero su rmance disminuirá un poco y perderá soporte para WithEvents

+0

¿Qué bibliotecas de componentes tenían cambios de interfaz? He probado algunos de ellos desempacando el MSI en una carpeta, y luego copiando manualmente las nuevas bibliotecas sobre las originales en los paquetes COM Reg-Free sin cambiar ninguna información de interfaz en el manifiesto del EXE. Hasta ahora todo funciona sin ningún cambio. – Bob

+0

Según el OP, la interfaz de Winsock OCX ha cambiado. No estoy seguro exactamente cómo cambió, pero uno podría averiguar extrayendo la biblioteca de tipos de ambas versiones y comparándolas. – rpetrich

2

Observe la "Descripción del paquete acumulado acumulativo de actualizaciones para el Visual Basic 6.0 Service Pack 6 Runtime Extended Files".

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

Este diciembre 30 de, actualización 2008 debe quitar y reemplazar la actualización de seguridad defectuosa Dic 9. Parece tratar tanto con 926857 como con 957924.

958369 parece ser un artículo de KB de Visual FoxPro para la misma actualización defectuosa (9 de diciembre). VFP usa muchos controles VB.

0

Me encontré con un problema similar al crear dinámicamente controles no intrínsecos en VB6. Quizás Winsock ya no se considera intrínseco. Trate de declarar su variable como VBControlExtender en lugar de Winsock, de la siguiente manera:

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 

Ver this MSDN article para más información.

Cuestiones relacionadas