Bonjour à tous,
Je développe un petit programme en VB6 basé sur un code en C++ qui va lire une valeur dans un périphérique connecté par USB.
Au niveau de la connexion avec le périphérique pas de soucis tout roule comme on dit ... Mais par contre je rencontre quelques soucis pour lire une valeur.
Ce que je dois faire pour lire une valeur c'est appeler la fonction "TP_PM249_GetCounter" qui se trouve dans une DLL (que je possède). Pour faire cela, en code C++ voici comment faire :
Définition :
Code (positionné sur un TIMER du formulaire) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part TP_PM249_API bool __stdcall TP_PM249_GetCounter(long DeviceNo, long* Count, long* Status);
Et moi ce que je cherche à faire, c'est la même chose mais ... en VB6 ... et comme vous pouvez le voir dans le code C++ il faut faire appelle à des adresse mémoire de variable (&lCounter, &lStatus). Voici comment j'ai procédé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 long lCounter = 0; long lStatus = 0; if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus)) { m_gCounter.m_iStat = DINIT; } m_gCounter.m_dNum = RATIO * lCounter;
1) Déclaration dans un module des fonctions suivantes :
2) Code (positionné sur un TIMER du formulaire) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long Public Declare Function TP_PM249_GetCounter Lib "TP_PM249.dll" (ByVal dwDevice As Long, ByRef Count As Long, ByRef Status As Long) As Boolean
Lors de l'exécution du code en VB6, voici le contenu de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Dim ptr_LCounter As Long ' pointer value Dim ptr_LStatus As Long ' pointer value Dim lcounter As String Dim lStatus As String lcounter = 0 lStatus = 0 ptr_LCounter = lstrcpy(lcounter, lcounter) ptr_LStatus = lstrcpy(lStatus, lStatus) SI_STATUS = TP_PM249_GetCounter(DevNum - 1, ptr_LCounter, ptr_LStatus)
ptr_LCounter ---> 1895948
ptr_LStatus ---> 2079476
(si j'exécute une seconde fois le code, les valeurs changent. Voici les valeurs que j'ai :
ptr_LCounter ---> 2079476
ptr_LStatus ---> 1595700)
Or, lorsque j'exécute le code en C++, voici le contenu de :
&lCounter --->0x0012f150
&lStatus ---> 0x0012f14C
(si j'exécute le code plusieurs fois, les valeurs ne changent pas).
Le but de tout ça c'est de pouvoir avoir en VB6 ce que je trouve en C++ c'est à dire les valeurs des adresses des variables ... afin que je puisse les passer en paramètre à la fonction : TP_PM249_GetCounter
Est-ce que vous pourriez m'aider un peu pour résoudre ce problème ? Je vous remercie d'avance pour le temps que vous allez consacrer à ce problème ...
Partager