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

VB 6 et antérieur Discussion :

ByVal dans l'API RegQueryValueEx


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Points : 305
    Points
    305
    Par défaut ByVal dans l'API RegQueryValueEx
    Salut à tous,

    Pour récuperer la valeur d'une entrée dans le registre (HKEY_CURRENT_USER\Environment\TMP) j'utilise les API RegOpenKeyEx et RegQueryValueEx comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    (...)
    ' Ouvrir d'abord la clé
    Dim hCle As Long
    RegOpenKeyEx HKEY_CURRENT_USER, "Environment", 0, KEY_ALL_ACCESS, hCle
     
    ' On lit maintenant
    Dim lpType As Long, LeBuffer As String, Longueur As Long
    Longueur = 255
    LeBuffer = Space(Longueur)
    RegQueryValueEx hCle, ByVal "TMP", ByVal 0&, lpType, byval LeBuffer, Longueur
    LeBuffer = Left(LeBuffer, Longueur - 1)
    (...)
    le code marche trés bien, MAIS : Pourquoi passer LeBuffer par valeur (si je la passe ByRef, VB plante ), je croyais que, pour attaquer la variable elle même, nous devons la passer ByRef..

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    C'est à cause d'une bidouille de microsoft concernant les variables string sous VB, le format n'est pas le même que pour C , Dans vb, on a un pointeur BTSR sur une variable qui commence 8 octets avant, ces 8 octets contenant la longueur de la chaine. En c, les pointeurs sur les chaines pointent sur le debut de chaine, la chaine se terminant par un zéro binaire.
    Ce qui fait que microsoft a fait une salade pas tres compréhensible pour pouvoir passer des chaines vb à une fonction d'une dll ecrite en C.
    D'apres ce que j'ai compris, (ce qui n'est pas forcément ce qui se passe rééllement), vb fait une copie de la chaine vb pour déposer celkle ci sur la pile avant d'appeller la fonction.
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  3. #3
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Points : 305
    Points
    305
    Par défaut Merci pour la réponse
    Merci beaucoup Delbeke
    Je sais que ce n'est pas la question, mais le contexte : j'aimerais bien connaitre d'autres salades Microsoft dans VB

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

Discussions similaires

  1. Comment couper la fénétre principal dans une api windows
    Par ALF-Teams dans le forum Visual C++
    Réponses: 6
    Dernier message: 25/08/2006, 15h30
  2. le Handle dans les APIs windows ?
    Par gootsu dans le forum Windows
    Réponses: 8
    Dernier message: 02/06/2006, 15h40
  3. [OpenOffice.org 2.0 Base] pb SQL dans l'API
    Par thepowerbeat dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 08/02/2006, 08h11
  4. Bug dans l'API rebar ?
    Par Train-train dans le forum MFC
    Réponses: 9
    Dernier message: 05/10/2005, 13h16

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