Beuz13
Messages postés25Date d'inscriptionlundi 19 juillet 2004StatutMembreDernière intervention14 décembre 2008
-
2 juin 2008 à 01:27
Utilisateur anonyme -
24 juil. 2010 à 14:18
Bonjour^^
Voila j'aimerai parametrer mon application avec un fichier .ini, j'ai cherché sur le net quelques tutos et j'ai trouvé une fonction qui utilise une API, mais certaine partie du code ne sont pas compatible avec VB2008, donc si quelqu'un pouvais m'aider a mettre à jour ceci...
Voila le code (je met en rouge les parties qui ne fonctionne pas sous vb2008) >
// Declaration API pour lire le fichier ini
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
Long
// Declaration API pour ecrire le fichier ini
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 2 juin 2008 à 03:49
bon c'est vraiment pour essayer hein....
(désolé pour la couleur)
dans une class nommée Cls_Ini, copie ce code :
Public Class Cls_Ini
'Declaration API pour lire le fichier ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
'Declaration API pour ecrire le fichier ini
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Integer
'chemin du fichier INI
Public Path As String
'fonction qui retourne la chaine selon la '[SECTION]' et la 'CLE='
Public Function GetValue(ByVal sSection As String, ByVal sKey As String) As String
'buffer
Dim Buffer As New System.Text.StringBuilder(255)
Buffer.Append(" ", 255)
Dim sRet As String = Buffer.ToString
Buffer.Length = 0
'retour API
Dim iRet As Integer = GetPrivateProfileString(sSection, sKey, "", sRet, sRet.Length, Me.Path)
'retour fonction
Return sRet.Substring(0, iRet)
End Function
'procédure qui va écrire la valeur à la '[SECTION]' et la 'CLE=' voulues
Public Sub SetValue(ByVal sSection As String, ByVal sKey As String, ByVal sValue As String)
WritePrivateProfileString(sSection, sKey, sValue, Me.Path)
End Sub
End Class
et dans une form par exemple :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim INI As New Cls_Ini
INI.Path = "C:\test.ini"
MessageBox.Show(INI.GetValue("SEC", "KEY"))
INI.SetValue("SEC", "KEY", "test")
End Sub
la création du buffer est fonctionnelle, maintenant aucune garantie que çà soit la meilleure manière...
si un DotNetien passe par là...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 2 juin 2008 à 02:25
salut,
string() -> utiliser un StringBuilder
left -> çà doit être IndexOf(..)
any -> string ou object
jète un oeil dans les snippets de www.codyx.org dans la catégorie CHAINES et API, tu devrais trouver de quoi faire ;)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 2 juin 2008 à 13:52
même si je ne fais pas de DotNet, ma curiosité l'a emporté...
j'avais parlé de déclaré le ANY en OBJECT..., on était pas si loin,
après demande de confirmation (merci Kenji), il est possible de déclarer l'API :
'Declaration API pour lire le fichier ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As System.Text.StringBuilder, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
ce qui nous fait alors gagner quelques lignes pour GetValue :
'fonction qui retourne la chaine selon la '[SECTION]' et la 'CLE='
Public Function GetValue(ByVal sSection As String, ByVal sKey As String) As String
'buffer
Dim Buffer As New System.Text.StringBuilder(255)
'appel API
Call GetPrivateProfileString(sSection, sKey, "", Buffer, Buffer.Capacity, Me.Path)
'retour fonction
Return Buffer.ToString()
Buffer.Length = 0
End Function
++ ;)
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 2 juin 2008 à 16:34
Salut,
Juste en passant, pourquoi utiliser un fichier ini? Il n'y a pas de classe pour gérer les ini dans le framework, ce n'est pas pour rien, c'est parce que aujourd'hui on fait tout avec du xml. Et pour gérer les xml, il y a tout ce qu'il faut das le framework
Bon, j'ai trouvé pour supprimer une clé mais pour une section entière, ça ne marche pas.
Public Sub DeleteKey(ByVal sSection As String, ByVal sKey As String)
'Supprime la 'CLE=' dans la '[SECTION]'.
WritePrivateProfileString(sSection, sKey, vbNullString, Me.PathINI)
End Sub
J'ai tenté pour supprimer la section :
Public Sub DeleteSection(ByVal sSection As String)
'Supprime la '[SECTION]'.
WritePrivateProfileString(sSection, vbNullString, vbNullString, Me.PathINI)
End Sub
Si ça marche ! Je suis con
J'avais fait une faute dans le nom de ma section. J'utilise "Me.PathINI" alors que dans l'exemple c'est "Me.Path" pour le chemin du fichier. C'est cool toutes les fonctions sont là pour traiter les fichiers INI.