Où peut-on trouver du code pour WritePrivateProfileString? [Résolu]

Signaler
Messages postés
13
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
19 février 2011
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
J'ai besoin d'écrire et de lire dans des fichiers "ini", je cherche donc du code pour les fonctions:

WritePrivateProfileString et GetPrivateProfileString, je peux facilement en trouver sur le net, mais je cherche du code qui fonctionne avec Visual studio 2010.

Quelqu'un saurait où je peux trouver ça?

Merci à l'avance!

11 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
' Déclaration
<DllImport("KERNEL32.DLL", EntryPoint:="WritePrivateProfileStringA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function WritePrivateProfileString(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
End Function


' Utilisation
....
If (WritePrivateProfileString("NomDeLaSection", "NomDeLaClé", "ValeurAEcrire", "CheminEtNomDuFichier") <> 0) Then
  Messagebox.Show("Tout est OK")
Else
  Messagebox.Show("Pas cool, erreur")
End If
....



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
13
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
19 février 2011

Salut Casy,
C'est peut-être simple pour toi,mais pour moi non.
Chaque fois que j'écris quelque chose la liste des erreurs s'allonge au bas de mon écran,alors j'apprécierais beaucoup si tu pouvais simplement me donner le code...

Merci à l'avance!
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
      Dim sb As New StringBuilder(MAX_ENTRY)
      Dim Ret As Integer = GetPrivateProfileString("NomSection", "NomClé", "ValeurParDéfaut", sb, MAX_ENTRY, "CheminEtNomDuFichier")
      Valeur = sb.ToString

Avec MAX_ENTRY une constante fixée à 32768

Si la section ou la clé n'est pas trouvée, ou si la clé n'a pas de valeur de renseignée, c'est la chaine passée dans le paramètre ValeurParDéfaut qui est retournée. On indique souvent une chaine vide pour ce paramètre mais tout autre chaine peut être indiquée selon le besoin.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
13
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
19 février 2011

Messages postés
13
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
19 février 2011

Salut Casy,
Merci beaucoup!
Aurais-tu les codes équivalents pour la lecture?
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Write et Read.

C'est bien la MSDN aussi

Cordialement, Bacterius !
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
C'est bien la MSDN aussi

Sauf que la MSDN ou les exemples sur le net donnent souvent les déclarations pour VB6 par pour .Net


Les déclarations manquantes :
  <DllImport("KERNEL32.DLL", EntryPoint:="GetPrivateProfileIntA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
  Private Shared Function GetPrivateProfileInt(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Integer, ByVal lpFileName As String) As Integer
  End Function
  <DllImport("KERNEL32.DLL", EntryPoint:="WritePrivateProfileStringA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
  Private Shared Function WritePrivateProfileString(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
  End Function
  <DllImport("KERNEL32.DLL", EntryPoint:="GetPrivateProfileStringA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
  Private Shared Function GetPrivateProfileString(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
  End Function
  <DllImport("KERNEL32.DLL", EntryPoint:="WritePrivateProfileStructA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
  Private Shared Function WritePrivateProfileStruct(ByVal lpszSection As String, ByVal lpszKey As String, ByVal lpStruct() As Byte, ByVal uSizeStruct As Integer, ByVal szFile As String) As Integer
  End Function
  <DllImport("KERNEL32.DLL", EntryPoint:="GetPrivateProfileStructA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
  Private Shared Function GetPrivateProfileStruct(ByVal lpszSection As String, ByVal lpszKey As String, ByVal lpStruct() As Byte, ByVal uSizeStruct As Integer, ByVal szFile As String) As Integer
  End Function
  <DllImport("KERNEL32.DLL", EntryPoint:="GetPrivateProfileSectionNamesA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
  Private Shared Function GetPrivateProfileSectionNames(ByVal lpszReturnBuffer() As Byte, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
  End Function
<DllImport("KERNEL32.DLL", EntryPoint:="GetPrivateProfileSectionA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function GetPrivateProfileSection(ByVal lpAppName As String, ByVal lpszReturnBuffer() As Byte, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
End Function
<DllImport("KERNEL32.DLL", EntryPoint:="WritePrivateProfileSectionA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function WritePrivateProfileSection(ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
End Function


Pour les exemples de codes, je te laisse essayer puisqu'il n'y a rien de compliqué.

Pour lire c'est GetPrivateProfileString qu'il faut utiliser. Les autres déclarations sont pour les fonctionnalités complémentaire autour des fichiers ini (et l'équivalent en base de registre)


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Sauf que la MSDN ou les exemples sur le net donnent souvent les déclarations pour VB6 par pour .Net

A en voir les déclarations en code managé données au-dessus il n'y a rien de sorcier, juste une déclaration VB standard précédée d'un DllImport plus ou moins trivial. Mais bon je me tais !

Cordialement, Bacterius !
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Oupps, c'est uniquement les API pour les fichiers ini que je donne

Il faut comprendre le paramètre lpApplicationName ou lpAppName comme étant le nom de la section à lire ou écrire


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
A en voir les déclarations en code managé données au-dessus il n'y a rien de sorcier, juste une déclaration VB standard précédée d'un DllImport plus ou moins trivial. Mais bon je me tais !


La différence se fait essentiellement sur les paramètres de type Integer (pour .Net) qui sont donnés habituellement comme Long dans les déclarations classiques. Cette différence crée des exceptions, des dépassements de pile, des crashs inexpliqués, ou, la plupart du temps des non fonctionnements sans aucune indication du problème.

On trouve aussi certains paramètres donnés comme As Any, type qui n'existe plus en .Net.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
13
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
19 février 2011