IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Equivalence VB6 d'un code C++. Adresse mémoire des variables


Sujet :

C++

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    TP_PM249_API bool __stdcall TP_PM249_GetCounter(long DeviceNo, long* Count, long* Status);
    Code (positionné sur un TIMER du formulaire) :
    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;
    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 : 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
    2) Code (positionné sur un TIMER du formulaire) :
    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)
    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 ...
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

  2. #2
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    1ère réponse google:

    VarPtr - Returns the address of a variable.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    lstrcpy() pour des long?

    N'est-il pas plus simple de faire ceci?
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Retours de ligne ajoutés pour que ça rentre dans le forum
    Public Declare Function TP_PM249_GetCounter Lib "TP_PM249.dll" ( _
     ByVal dwDevice As Long, ByRef Count As Long, ByRef Status As Long _
     ) As Boolean
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim lcounter As Long
    Dim lStatus As Long
     
    lcounter = 0
    lStatus = 0
     
    SI_STATUS = TP_PM249_GetCounter(DevNum - 1, LCounter, LStatus)
    C'est à ça que sert le mot-clé ByRef, après tout... Il équivaut au & de C++.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/07/2014, 22h39
  2. Ordre en mémoire des variables dans une structure
    Par guillaume-13015 dans le forum C
    Réponses: 8
    Dernier message: 12/03/2013, 15h52
  3. Garder en mémoire des variables
    Par Mandjames dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/05/2009, 15h40
  4. Adresse Mémoire des Entrées-Sorties
    Par B-NeT dans le forum Windows
    Réponses: 1
    Dernier message: 10/07/2008, 16h04
  5. [VB6] procédure de vérification d'adresse mail ?
    Par ghohm dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/06/2004, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo