Problème avec GetPrivateProfileString [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
28 octobre 2009
-
leonrv
Messages postés
6
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
28 octobre 2009
-
Bonjour,

Je suis sur VB6 sous Vista.
J'utilise GetPrivateProfileString pour lire le contenu d'un .INI que j'ai écrit avec WritePrivateProfileString.
Avec ce code :
GetPrivateProfileString(Entete, Variable, "", Retour, Len(Retour), Fichier)
mais le contenu de ma chaîne Retour ne change pas, il reste tel que je le formate précédemment, alors que ma clé existe bien, le chemin de mon fichier est bon, etc...
Par contre, GetPrivateProfileString me retourne le bon nombre de caractère que contient cette clé (ici 7).
Je ne comprends pas d'où le problème peut venir.
Une incompatibilité avec Vista ?...

Merci d'avance pour votre aide.

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
"As Any" est source d'erreurs, éviter.
lpDefault inutilisé, on mettre As Long pour passer 0.


Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As Long, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Integer




Function LireINI(Entete As String, Variable As String) As String
  Dim Retour As String, Fichier As String, n As Long
  Fichier = App.Path & "" & "Test.ini"
  Retour = String(255, "A")
  n = GetPrivateProfileString(Entete, Variable, 0, Retour, 255, Fichier)
  LireINI = Left$(Retour, n)
End Function


Devrait aller si mes souvenirs VB vont bien.

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Len(Retour) que tu donnes en param contient bien la taille de la String Retour ???
Il faut avoir dimensionné correctemnet Retour AVANT l'appel API.

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
28 octobre 2009

Oui, il fait bien 255 caractères comme je l'ai dimensionné avant.
J'ai testé l'EXE sous XP pour voir, et ça ne change rien au problème : le contenu de Retour n'est pas modifié...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Faut voir ton Declare VB de GetPrivateProfileString() et ton code d'appel.

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
28 octobre 2009

Mon code :

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Integer

Function LireINI(Entete As String, Variable As String) As String

Dim Retour, Fichier As String
Fichier = App.Path & "" & "Test.ini"
Retour = String(255, "A")
LireINI = Left$(Retour, GetPrivateProfileString(Entete, Variable, "", Retour, Len(Retour), Fichier))
'GetPrivateProfileString Entete, Variable, "", Retour, Len(Retour), Fichier
'LireINI = Left(Retour, InStr(Retour, Chr(0)) - 1)
'Text1.Text = Retour

End Function

J'appelle LireINI() comme ceci :

ToTo = LireINI("Com", "PortCom")

Et le INI à cette tête :

[Com]
Interface=False
PortCom=1234567

Merci pour ton aide..
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
9
Et personnellement, je fait cela pour le buffer de retour :

Dim Retour As String * 255

Retour = String$(255, vbNullChar)
Messages postés
6
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
28 octobre 2009

Grand Merci à vous !
A partir de ton code BruNews j'ai trouvé mon erreur.

Elle est juste à cette ligne :
Dim Retour, Fichier As String  =>  Dim Retour As String, Fichier As String
Je n'ai pas pensé à séparer les 2 variables... petites subtilités de VB qui m'échappe, mais bon.

Encore merci !