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 :

[D7] Besoin d'aide sur un PChar


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 19
    Points : 19
    Points
    19
    Par défaut [D7] Besoin d'aide sur un PChar
    Bonjour à tous,

    Voici un bout de code qui provient de l'aide de Delphi 7 sur la fonction FileRead :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
    	iFileHandle:Integer;
    	iFileLength:Integer;
    	iBytesRead:Integer;
    	Buffer:PChar;
    begin
    	iFileHandle :=FileOpen(OpenDialog1.FileName,fmOpenRead);
    	iFileLength :=FileSeek(iFileHandle,0,2);
    	FileSeek(iFileHandle,0,0);
    	Buffer :=PChar(AllocMem(iFileLength +1));
    	iBytesRead :=FileRead(iFileHandle,Buffer^,iFileLength);
    ...
    Je n'arrive pas à piger ce que fait exactement cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	Buffer :=PChar(AllocMem(iFileLength +1));
    Normalement "AllocMem(iFileLength +1)" doit renvoyer un Pointer et un "PChar(Pointer)" je pige pas ce que ça fait.

    Quelqu'un peut m'aider ?

    Merci,
    Bobby-B

  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
    ben c'est un cast : ça dit au compilateur de considérer ce pointeur comme un PChar, ie un pointeur vers une chaine de caractères
    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
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut

    dans le même sujet, est-ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var s:string;
    begin
      p:=PChar(s);
    end;
    ajoute tout seul #0 à la fin ou faut-il faire PChar(s+'#10')?

    Merci d'avance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    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
    non, PChar(s) suffit

    au passage, une subtilité de strLPcopy : en dernier param, on lui donne la longueur max à copier, mais il ne tient pas compte du zéro terminal pour ce controle.
    donc si T: array[1..n] of char; , il faut donner (n-1) comme max à strLPcopy
    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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    Merci gord's pour ta réponse.

    Est-ce que concrètement il y a besoin de caster le pointer en PChar à cet endroit ou on aurait pu décider d'utiliser un pointer de base ?
    Et aussi : pourquoi il fait un "AllocMem(iFileLength +1)" et non pas un "AllocMem(iFileLength)" ?

    Merci.

  6. #6
    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
    Citation Envoyé par bobby-b
    Est-ce que concrètement il y a besoin de caster le pointer en PChar à cet endroit ou on aurait pu décider d'utiliser un pointer de base ?
    c'est pas toi qui décide, c'est la procédure fileRead qui a besoin d'un PChar
    Citation Envoyé par bobby-b
    Et aussi : pourquoi il fait un "AllocMem(iFileLength +1)" et non pas un "AllocMem(iFileLength)" ?
    +1 = pour mettre le zéro terminal
    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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    Ok gord's merci encore.

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

Discussions similaires

  1. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  2. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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