Problème avec GetPrivateProfileString [Résolu]

leonrv 6 Messages postés jeudi 29 avril 2004Date d'inscription 28 octobre 2009 Dernière intervention - 31 janv. 2008 à 17:32 - Dernière réponse : leonrv 6 Messages postés jeudi 29 avril 2004Date d'inscription 28 octobre 2009 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

7 réponses

BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 31 janv. 2008 à 20:37
+3
Utile
"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++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 31 janv. 2008 à 18:11
0
Utile
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++
Commenter la réponse de BruNews
leonrv 6 Messages postés jeudi 29 avril 2004Date d'inscription 28 octobre 2009 Dernière intervention - 31 janv. 2008 à 18:15
0
Utile
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é...
Commenter la réponse de leonrv
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 31 janv. 2008 à 18:31
0
Utile
Faut voir ton Declare VB de GetPrivateProfileString() et ton code d'appel.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
leonrv 6 Messages postés jeudi 29 avril 2004Date d'inscription 28 octobre 2009 Dernière intervention - 31 janv. 2008 à 19:16
0
Utile
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..
Commenter la réponse de leonrv
Kristof_Koder 920 Messages postés vendredi 3 août 2007Date d'inscription 27 octobre 2008 Dernière intervention - 31 janv. 2008 à 22:53
0
Utile
Et personnellement, je fait cela pour le buffer de retour :

Dim Retour As String * 255

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.