Equivalence VB6 d'un code C++. Adresse mémoire des variables
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:
TP_PM249_API bool __stdcall TP_PM249_GetCounter(long DeviceNo, long* Count, long* Status);
Code (positionné sur un TIMER du formulaire) :
Code:
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; |
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é :
1) Déclaration dans un module des fonctions suivantes :
Code:
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 |
2) Code (positionné sur un TIMER du formulaire) :
Code:
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) |
Lors de l'exécution du code en VB6, voici le contenu de :
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 ...