J'essaye de convertir une petite partie de code VB 2008 en VB6 et cela me pose problème car je ne trouve pas d'équivalence ou même une astuce pour contourner le problème.
C'est pourquoi je me permet de poster ici pour solliciter votre aide.
Voici le code VB 2008 :
Public Class Form1
Dim ts As TemperatureServerLib.TempMeterServer = New TemperatureServerLib.TempMeterServer ' get instance of the temperatureserver
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler ts.OnMeasurement, AddressOf ts_OnMeasurement ' Connect our event handler
End Sub
Public Sub ts_OnMeasurement(ByVal type As Integer, ByVal v As Object) ' Event handler
Dim s As String
s = type.ToString() + " " + v(0).ToString() + " " + v(1).ToString() + " " + v(2).ToString()
Debug.Print(s)
End Sub
End
Il s'agit de détecter un évènement d'un exécutable externe au programme mais référencé dans le projet VB. Un récepteur est connecté au PC en USB et reçoit toutes les 45 secondes les informations de sondes et notamment la température relevée de chaque sondes. A chaque fois que que l'évènement se produit, l’exécutable (référencé dans le projet VB) qui gère le port USB déclenche la lecture des températures.
Voici le code vb6 que j'imagine :
Private Sub Form_Load()
Dim ts As Object
Set ts = CreateObject("TemperatureServer.TempMeterServer")
AddHandler ts.OnMeasurement, AddressOf ts_OnMeasurement ' Connect our event handler
End Sub
Public Sub ts_OnMeasurement(ByVal tp As Integer, ByVal v As Object) ' Event handler
Dim s As String
s = tp.ToString() + " " + v(0).ToString() + " " + v(1).ToString() + " " + v(2).ToString()
Debug.Print (s)
End Sub
Evidemment le bout de code qui me pose problème c'est le AddHandler avec AddressOf.
De même, j'ai du mal à concevoir le "Public Class Form1"
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 26 mars 2013 à 09:52
Bonjour,
Je ne connais pas VB.Net.
Mais je comprends que tu veux déclarer un évènement sous VB6 ?
Si oui :
il te faut créer une Classe (ajout d'un module de classe, donc) en Public.
Cette classe doit revêtir cet aspect :
Public Class A
Dim .... As .....
Public Sub Init()
AddHandler ...., AddressOf .....toto
End Sub
Public Sub toto(ByVal ...as ..., Byval ... as ..., etc ...)
.... tes instructions d'évènement
....
End Sub
End Class
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Oui c'est bien ça, je veux déclarer un évènement sous VB6
Mais je ne comprends pas. la syntaxe Public class A ne fonctionne pas sous VB6?
AddHandler non plus n'est pas géré me semble t'il.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 26 mars 2013 à 10:57
Ce que je t'ai montré est un "schéma" général.
Sous VB6, la classe sert à utiliser, pour un objet, les évènements qu'il accepte (et uniquement ceux-là)
La première ligne de code de la classe est donc du genre :
Public WithEvents toto As tel_objet
elle est alors suivie des procédures évènementielles possibles pour l'objet tel_objet, genre :
Private Sub toto_tel_évènement(ByVal ......)
... instructions ici lorsque surgit l'évènement tel_évènement
End Sub
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 26 mars 2013 à 11:49
Tu peux bien évidemment également créer un "évènement" (avec addressof ou avec un timer) pour en repérer l'intervention dans un cas prédifini (changement, par exemple, de la valeur d'une propriété existante).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Voici le code VB6 que j'ai testé sans classe car en fait le constructeur donne dans sa doc l'évènement (OnMeasurement) qui se produit lors de l'arrivé des données :
Private WithEvents ts As TemperatureServerLib.TempMeterServer
Private Sub ts_OnMeasurement(ByVal tp As Integer, ByVal tmp)
Set ts = New TemperatureServerLib.TempMeterServer
Call ts_Measurement(tp, ts)
End Sub
Private Sub ts_Measurement(ByVal tp As Integer, ByVal v As Object) ' Event handler
Dim s As String
s = tp & " " & v(0) & " " & v(1) & " " & v(2)
Debug.Print (s)
End Sub
Malheureusement VB me retourne directement l'erreur : "Fonction ou interface est mentionnée avec restriction ou la fonction utilise un type Automation non géré par Visual Basic"
L'évènement OnMeasurement est un évènement donné par la documentation du constructeur et donc l'appel est bon. Mais comme certaines autres fonctions elles ne semble pas géré via VB6.