Défintition des fonctions pour Fichier ini

Résolu
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 - 10 janv. 2011 à 05:41
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 10 janv. 2011 à 10:28
Bonjour, voilà j'ai lu le tutoriel :
[url=http://www.vbfrance.com/tutoriaux/PRESENTATION-UTILISATION-FICHIERS-INI_939.aspx].
Mais je ne comprend pas les erreurs trouvées par VB10 à savoir :
"As Any" -> Erreur 3 'As Any' n'est pas pris en charge dans les instructions 'Declare'.
"String(255, 0)" -> Erreur 4 'String' est un type classe et ne peut pas être utilisé en tant qu'expression. ET Erreur 5 '.' attendu.
Je pense peut-être à une erreur de syntaxe vu que le tuto est en VB6

J'ai posté un commentaire sur la page de tuto mais il ne semble pas fréquenté donc pas de réponse là-bas.

merci

9 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 janv. 2011 à 09:19
Les déclarations des API en .net sont les suivantes :
  <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



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 janv. 2011 à 09:33
Rajoute ces 2 lignes en début de ton fichier :
Imports System.Runtime.InteropServices
Imports System.Text


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 janv. 2011 à 07:43
salut,

c'est en effet du vb6...
à remplacer par object en dotnet, mais c'est loin d'être la seule modif à effectuer
tu trouveras des sources toutes prêtes pour dotnet, ou d'autres solutions (xml, settings, etc)

++
[hr]
0
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
10 janv. 2011 à 08:35
Merci, mais à quelles autres sources fais tu référence.
0

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

Posez votre question
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
10 janv. 2011 à 09:26
le copie coller de ton code comporte des erreurs dont :
dllimport non défini
stringbuilder non défini

merci
0
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
10 janv. 2011 à 09:40
merci mais comment utiliser ces fonctions maintenant ? car en suivant le tuto j'ai ceci :
Function EcritDansFichierIni(ByVal Section As String, ByVal Cle As String, _
                                         ByVal Valeur As String, ByVal Fichier As String) As Long
        EcritDansFichierIni = WritePrivateProfileString(Section, Cle, Valeur, Fichier)
    End Function

et cela :
 Function LitDansFichierIni(ByVal Section As String, ByVal Cle As String, ByVal Fichier As String, _
    Optional ByVal ValeurParDefaut As String = "") As String

        Dim strReturn As String

        strReturn = "tt"

        GetPrivateProfileString(Section, Cle, ValeurParDefaut, strReturn, Len(strReturn), Fichier)
        LitDansFichierIni = Left(strReturn, InStr(strReturn, Chr(0)) - 1)
    End Function

mais il y a l'erreur impossible de convertir type string en stringbuilder
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 janv. 2011 à 10:14
EcrireDansFichierIni est normalement correcte.

Pour LitDansFichierIni, dans ma fonction équivalente, j'ai ceci :

    Try
      Dim sb As New StringBuilder(MAX_ENTRY)
      Dim Ret As Integer = GetPrivateProfileString(Section, Cle, ValeurParDefaut, sb, MAX_ENTRY, Filename)
      Return sb.ToString
    Catch
      Return ValeurParDefaut
    End Try


Avec MAX_ENTRY une constante fixée à 32768


J'ai tout ça dans une classe avec plusieurs autres fonctions autour des fichiers ini, le tout intégré dans une bibliothèque de classe. Il faudrait que je la publie mais pour le moment j'ai pas trop de temps pour la préparer

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
10 janv. 2011 à 10:17
ok j'essaierai ceci merci pour ton temps.
par contre, j'ai lu que le fichier pour être lu sans soucis d'autorisation devait être placé dans le répertoire C est-ce vrai ou peut-on le mettre directement ou se trouve l'executable de mon app ?

merci encore.

Youhou !!
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 janv. 2011 à 10:28
Tout dépend de ton OS. Avec XP, je ne me souviens pas qu'il y ait des problèmes (à moins que tu ais un compte utilisateur avec droits restreints). Vista je ne connais pas, mais avec W7, il peut y avoir des problèmes

C'est à essayer mais placé dans le dossier de l'exécutable, je pense que tu devrais arriver à le lire. Par contre tu auras peut-être effectivement des soucis pour y écrire.

Normalement, maintenant avec W7, ces fichiers là, pour pouvoir y écrire sans problème, sont à mettre dans un sous dossier du dossier utilisateur. Mais cela nécessite un fichier par utilisateur, ce qui n'est pas toujours pratique. C'est vrai que W7 complique un peu les choses à ce niveau là.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Rejoignez-nous