Problème avec GetPrivateProfileString

Résolu
leonrv Messages postés 6 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 28 octobre 2009 - 31 janv. 2008 à 17:32
leonrv Messages postés 6 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 28 octobre 2009 - 31 janv. 2008 à 23:42
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.
A voir également:

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 janv. 2008 à 20:37
"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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 janv. 2008 à 18:11
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++
0
leonrv Messages postés 6 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 28 octobre 2009
31 janv. 2008 à 18:15
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é...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 janv. 2008 à 18:31
Faut voir ton Declare VB de GetPrivateProfileString() et ton code d'appel.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leonrv Messages postés 6 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 28 octobre 2009
31 janv. 2008 à 19:16
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..
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
31 janv. 2008 à 22:53
Et personnellement, je fait cela pour le buffer de retour :

Dim Retour As String * 255

Retour = String$(255, vbNullChar)
0
leonrv Messages postés 6 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 28 octobre 2009
31 janv. 2008 à 23:42
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 !
0
Rejoignez-nous