Où peut-on trouver du code pour WritePrivateProfileString?

Résolu
Monocle2 Messages postés 13 Date d'inscription lundi 24 janvier 2011 Statut Membre Dernière intervention 19 février 2011 - 6 févr. 2011 à 18:29
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 7 févr. 2011 à 10:08
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 févr. 2011 à 18:49
' 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
3
Monocle2 Messages postés 13 Date d'inscription lundi 24 janvier 2011 Statut Membre Dernière intervention 19 février 2011
7 févr. 2011 à 04:32
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!
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
7 févr. 2011 à 10:08
      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
3
Monocle2 Messages postés 13 Date d'inscription lundi 24 janvier 2011 Statut Membre Dernière intervention 19 février 2011
6 févr. 2011 à 21:02
0

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

Posez votre question
Monocle2 Messages postés 13 Date d'inscription lundi 24 janvier 2011 Statut Membre Dernière intervention 19 février 2011
6 févr. 2011 à 21:04
Salut Casy,
Merci beaucoup!
Aurais-tu les codes équivalents pour la lecture?
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 févr. 2011 à 21:09
Write et Read.

C'est bien la MSDN aussi

Cordialement, Bacterius !
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 févr. 2011 à 21:16
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
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 févr. 2011 à 21:20
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 !
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 févr. 2011 à 21:21
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 févr. 2011 à 21:25
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
0
Monocle2 Messages postés 13 Date d'inscription lundi 24 janvier 2011 Statut Membre Dernière intervention 19 février 2011
7 févr. 2011 à 04:27
0
Rejoignez-nous