IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Problème sur GetPrivateProfileString ???


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème sur GetPrivateProfileString ???
    : Il y a un truc qui cloche et je sais pas quoi...
    J'ai créer une fonction qui utilise GetPrivateProfileString, et ça plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ReadIni(KeyGroup,Key:string):string;
    var
      TmpBuffer:PAnsiChar;
    begin
      SetString(ReadIni,TmpBuffer,GetPrivateProfileString(PAnsiChar(KeyGroup),PAnsiChar(Key),'',TmpBuffer,256,PAnsiChar('Toto.ini')));
    end;
    Quelqu'un pourait-il m'aider.
    Merci
    Delphi 7, WinXP pro.
    Travail minimum, pour Rendement maximum...

  2. #2
    Membre habitué Avatar de gord's
    Inscrit en
    Avril 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 115
    Points : 127
    Points
    127
    Par défaut
    il faudrait penser à allouer tmpBuffer !

    ou alors utilises un TIniFile, c'est quand même plus simple :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    var
        ini : TIniFile;
     
    ...
     
        if FileExists(nomDuFichier) then
            ini := TIniFile.Create(nomDuFichier)
        else
            ini := nil;
     
    ...
     
        if assigned(ini) then
            result := ini.Readstring(NomDeLaSection,NomDuChamp,ValeurParDefaut)
        else
            result := ValeurParDefaut;
     
    ...
     
        FreeAndNil(ini);
    La prochaine révolution informatique : les machines qui font ce qu'on veut, au lieu de faire ce qu'on leur demande...
    Grand Vizir du Grand Gourou - Trois-quart aile gauche du TRFC et intendant de 3ème mi-temps - Papy fait de la résistance

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par gord's
    il faudrait penser à allouer tmpBuffer !
    Excuse mon ignorance mais comment fais tu pour allouer tmpBuffer ?
    Delphi 7, WinXP pro.
    Travail minimum, pour Rendement maximum...

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Peut-être que ça plante parce que tu mis le nom de ta fonction (ReadIni) comme paramètre de SetString.

    Passe alors par une varibale intermédiaire.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Osiris 2B
    Peut-être que ça plante parce que tu mis le nom de ta fonction (ReadIni) comme paramètre de SetString.

    Passe alors par une varibale intermédiaire.
    J'ai éssayé mais ca fait la même chose.
    Merci quand même.
    Delphi 7, WinXP pro.
    Travail minimum, pour Rendement maximum...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 20
    Points : 25
    Points
    25
    Par défaut
    Ca plante parce que tu forces la copie dans une zone mémoire qui n'est pas allouée (tmpBuffer ne pointe sur rien). On appelle cela un effet de bord.

    Pour allouer dynamiquement de la mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetMem( tmpBuffer, 256);  // 256 ou plus selon le besoin
    Avant de quitter ta fonction, quand tu n'as plus besoin de tmpBuffer, n'oublie pas de désallouer le bloc mémoire que pointe tmpBuffer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FreeMem( tmpBuffer); tmpBuffer := Nil;
    Sinon comme dit gord's, utilises un TIniFile c'est moins prise de tête...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci je vais tester ca de suite.
    A+
    Delphi 7, WinXP pro.
    Travail minimum, pour Rendement maximum...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bon les gars, j'arrete de me prendre le choux alors qu'une soluce plus simple est dispo (ReadString ex plus haut...).
    Donc j'appose la balise [RESOLU] mais cela ne l'est pas...
    Un grand merci quand même.
    Delphi 7, WinXP pro.
    Travail minimum, pour Rendement maximum...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55
  3. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo