jon51
Messages postés35Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention31 juillet 2008
-
28 juil. 2008 à 16:37
jon51
Messages postés35Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention31 juillet 2008
-
31 juil. 2008 à 07:59
bonjour,
j'ai un problèmeavec un petit bout de code qui sert à lire et crire dans un fichier .INI pour écrire je n'ai aucun problème par contre pour la parite de lecture j'ai un avertissement voici le code:
Function LireINI(
ByVal pEntete
As
String,
ByVal pVariable
As
String)
As
String
Dim l_szRetour
As
String
Dim l_lRetour
As
Long
Dim l_szFichier
As
Stringl_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf(""c)) &
End
Functionend function est souligné en vert l'avertissemnt est le suivant:
la fonction "lireINI"ne retourne pas une valeur pour tous les chemin de code.une ecception de reference null peut se produire au moment de l'execution lorsque le résultat est utilisé.
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 28 juil. 2008 à 20:06
Salut,
En fait il fait un LireINI = Strings.Left$(l_szRetour, l_lRetour), ce qui est plus ou moins la même chose que Return
Strings.Left$(l_szRetour, l_lRetour). Par contre, il manque un
LireINI = "" après le
MsgBox("Fichier introuvable"
)
Mais la solution de Gillard va aussi, puisque il retourne la valeur après le If / End If quel que soit la valeur attribué...
Mais ce code me semble un peu compliqué (faut dire que cette colorisation de code fait un #@¬§°# de formatage du texte).
Voilà comment je ferais:
Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (lpApplicationName As String, lpKeyName As String, lpDefault As String, lpReturnedBuffer As String, nSize As Integer, lpFileName As String) As Integer
Public Function GetCle(File As String, Section As String, Key As String, Optional DefaultValue As String = "") As String
Dim Ret As New String(vbNullChar, 1024)
Dim Lng As String = GetPrivateProfileString(Section, Key, DefaultValue, Ret, 1024, File)
Return Ret.Substring(0, Lng)
End Function
jon51
Messages postés35Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention31 juillet 2008 29 juil. 2008 à 08:20
re bonjour,
tout d'abord merci pour vos reponse.
j'ai essayé avec return str mais il m'ajoute de suite des parenthèse derrière et me le souligne en vert.
voici l'erreur:
argument non spécifié pour le parametre 'number' de 'public function str(number as object)as string'
voila si vous avez une idée??
merci
jon51
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 29 juil. 2008 à 11:35
C'est parce que str est le nom d'une fonction. Change le nom de cette variable et ça devrait passer...
Et sinon, pourquoi ne pas utiliser mon exemple? (c'est plus simple non?)
Dim Ret As New String(vbNullChar, 1024)
Dim Lng As String = GetPrivateProfileString(Section, Key, DefaultValue, Ret, 1024, File)
Return Ret.Substring(0, Lng)
Je ne fais pas le test pour savoir si le fichier existe, mais ce genre de chose doit se faire une fois au démarrage de l'appli et pas à chaque fois que l'on accède à une valeur du fichier. De cette façon:
Dim File As String = Application.StartupPath & "\config.ini"
If Not IO.File.Exists(File) Then
MsgBox("Fichier introuvable"
)
End If
Ou sinon, fais comme je l'ai dis, tu change rien à ce que tu fesais avant (LireINI = Strings.Left$(l_szRetour, l_lRetour)
) mais tu rajoute un LireINI = "" juste après ton MsgBox("Fichier introuvable"
)
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 29 juil. 2008 à 18:47
Tout d'abord tu déclare l'API et une fonction qui utilise cette API pour récupérer une valeur:
' Déclaration de l'API
Private
Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias
"GetPrivateProfileStringA" (lpApplicationName As String, lpKeyName As
String, lpDefault As String, lpReturnedBuffer As String, nSize As
Integer, lpFileName As String) As Integer
' Fonction qui permet de récupérer une valeur d'une fichier INI.
' File = Le nom du fichier
' Section = Le nom de la section
' Key = Le nom de la clé pour laquelle récupérer la valeur
' DefaultValue = Valeur à retourner lorsque la clé n'existe pas
Public Function GetCle(File As String, Section As String, Key As String, Optional DefaultValue As String = "") As String
' Créer un buffer (un string) pour récupérer la valeur
Dim Ret As New String(vbNullChar, 1024)
' Appel de l'API pour lire le fichier et récupérer la valeur
Dim Lng As String = GetPrivateProfileString(Section, Key, DefaultValue, Ret, 1024, File)
' Formater le résultat (enlever les espaces en trop)
Return Ret.Substring(0, Lng)
End Function
Dans ton Form_Load par exemple, tu test si le fichier INI existe :
' Chemin du fichier :
Dim File As String = Application.StartupPath & "
\config.ini"
' Si le fichier n'existe pas....
If Not IO.File.Exists(File) Then
' ... afficher un message d'avertissement
MsgBox(
"Fichier introuvable"
)
[code en plus]
End If
A toi de voir ce que tu fais lorsque le fichier n'existe pas (soit fermer le prog, créer le fichier, etc)
Ensuite, tu appel la fonction
GetCle
pour récupérer une valeur :
' Chemin du fichier :
Dim File As String = Application.StartupPath & "
\config.ini"
' Récupérer la valeur
Dim Value As String =
jon51
Messages postés35Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention31 juillet 2008 30 juil. 2008 à 09:31
re bonjour,
tout d'abord merci.
j'ai essayé votre solution je n'ai plus d'erreur mais il ne me retourne pas de valeur. j'ai testé en fesant un msgbox mais il me retourne une valeur null c'est à dire rien.
voici le code:
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Chemin du fichier :
Dim File AsString = Application.StartupPath & " \config.ini"
' Récupérer la valeur
Dim Value AsString = LireINI(File, "IPborne", "de")
MsgBox(Value)
EndSub
j'ai vérifié dans config.INI et il m'écrit bien les valeur que je lui dit donc je ne sais pas ce qui se passe.
auriez-vous une idée.