Conversion Code VB 2008 en VB 6

Signaler
-
 elyan77 -
Bonjour,

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"

Par avance merci de votre aide.

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Bonjour ucfoutu,

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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
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.