2008-12-18 5 views
6

Nous avons mis à jour nos machines avec un correctif microsoft listé ci-dessus et rencontrons maintenant des problèmes avec certains contrôles winsock. Tout en se déplaçant à la nouvelle bibliothèque de composants, il y avait deux questions que nous avons été confrontés:Microsoft Patch 958369 MS08-070 a cassé mon application VB6 (incompatibilité de type - contrôle créé dynamiquement)

  • Nous créons un contrôle Winsock dynamiquement à l'aide Form.Controls.Add (...). Avec les nouvelles DLL, il nous a donné une erreur d'exécution 731 indiquant que nous devions ajouter la licence.

Ce problème a été résolu en ajoutant une ligne License.Add (PrgID du contrôle) avant d'ajouter le contrôle.

Maintenant, le problème est que lorsque nous essayons de définir ce contrôle sur un objet de type mWinsock, nous obtenons une erreur d'exécution Type Incompatibilité. Des pensées?

Répondre

1

Vous devrez peut-être ajouter le contrôle à la boîte à outils afin que le projet VB6 et le formulaire aient une référence appropriée à celui-ci. Vous devrez le faire même si vous ne l'avez pas réellement sur le formulaire au moment du design.

Avec le VB de référence ne peut pas avoir toutes les informations nécessaires pour résoudre les méthodes et les propriétés du contrôle à l'exécution

0

Depuis la signature de l'interface ont changé, vous devrez supprimer la référence composante du projet , enregistrez et fermez complètement VB6, annulez l'enregistrement de l'ancien contrôle, enregistrez la nouvelle version à partir du correctif, rouvrez votre projet et rajoutez le composant. Si vous faites cela, vous perdrez probablement le support pour les machines qui n'ont pas le correctif installé (ou vous devrez l'installer en tant qu'élément de votre paquet d'installation)

Bien sûr, vous pouvez toujours déclarer la référence "As Object" si c'est plus facile mais votre perfo rmance va baisser un peu et vous perdrez le support de WithEvents

+0

Quelles bibliothèques de composants avaient des changements d'interface? J'ai testé quelques-uns d'entre eux en décompressant le fichier MSI dans un dossier, puis en copiant manuellement les nouvelles bibliothèques sur celles d'origine dans les paquets COM sans Reg sans modifier les informations d'interface dans le fichier manifeste du fichier EXE. Jusqu'à présent, tous travaillent sans changement. – Bob

+0

Selon l'OP, l'interface Winsock OCX a changé. Je ne suis pas sûr exactement comment cela a changé, mais on pourrait trouver en extrayant la bibliothèque de types des deux versions et en les comparant. – rpetrich

2

Jetez un oeil à "Description du correctif cumulatif pour les fichiers étendus d'exécution de Visual Basic 6.0 Service Pack 6".

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

ce 30 Décembre 2008 Mise à jour devrait supprimer et remplacer le défectueux 9 décembre la mise à jour de sécurité. Il semble traiter à la fois 926857 et 957924.

958369 semble être un article KB Visual FoxPro pour la même mise à jour défectueuse (9 décembre). VFP utilise de nombreux contrôles VB.

0

J'ai rencontré un problème similaire lors de la création dynamique de contrôles non intrinsèques dans VB6. Peut-être que Winsock n'est plus considéré comme intrinsèque. Essayez déclarer votre variable VBControlExtender au lieu de Winsock, comme suit:

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 

Voir this MSDN article pour plus d'informations.

Questions connexes