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

Delphi Discussion :

Transtypage String en Pchar impossible


Sujet :

Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 493
    Points
    493
    Par défaut Transtypage String en Pchar impossible
    Bonjour,

    Je viens d'installer Delphi et j'ai une erreur de "transtypage incorrect" à la compilation lorsque que je tente de caster un type string en Pchar.


    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Test(Val:Pchar);
    begin
     
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
    begin
     test(pchar(s));//provoque une erreur de compilation  
    end;

    Je soupçonne un paramètre de compilation mais je ne vois pas lequel, une idée ?
    Mobile first !
    Développeur & co-fondateur de appSoluce ! - développement de solutions mobiles cross-platform

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Sur mon Delphi 7 ça fonctionne parfaitement.
    -Slimjoe

  3. #3
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    chez moi aussi es-tu bien sûr que l'erreur vient de la ligne que tu indiques ?
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Si tu es sur une vielle version de Delphi, en effet, ça ne passera pas


    Unclus l'unité SysUtils et sers-toi de la fonction StrPCopy pour transformer ta chaîne en PChar, à l'aide d'un tableau de Char, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      P: array[0..255] of Char;
      S: string;
    begin
      ...
      Test(StrPCopy(P, S));
    end;
    Attention à prévoir un tableau de Char de taille suffisante. Sinon, tu peux utiliser une chaîne PChar, mais il fauit lui allouer de la mémoire au préalable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
      P: PChar;
      S: string;
    begin
      ...
      { StrAlloc pour allouer la mémoire, +1 pour ne pas oublier le #0 terminal }
      P := StrAlloc(Length(S) + 1);
      Test(StrPCopy(P, S));
      { On a fini avec P, on libère la mémoire }
      StrDispose(P);
    
    end;
    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Aller dans "Project/options/compilers" et, dans le panneau "syntax Options", cocher "Extended syntax" (C'est en version US... à traduire en FR ).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 493
    Points
    493
    Par défaut
    Je ne comprends pas vraiment d'où vient le problème, c'est la première fois que ça m'arrive.

    Eric Sigoillot, denokan, slimjoe:Je suis sur Delphi7 entreprise et le code que j'ai mis est un exemple minimal destiné à illuster l'impossibilité chez moi de caster en Pchar à la compilation.

    Je vais préciser un peu le contexte:
    J'ai écrit un programme qui exécute des fonctions contenues dans une DLL, d'où l'utilisation intensive de PChar et de transtypages.
    Je récupère le programme et change de domicile quelques jours et installe Delphi7 sur un nouveau poste et là surprise ? Le code ne compile plus et tous les transtypages sont refusés.

    Je ne veux pas faire de StrCopy mais bien comprendre pourquoi ce source ne compile plus sur ma nouvelle machine...

    Graffito:j'ai essayer de cocher la case 'syntaxe étendue' mais ça ne compile toujours pas.
    Mobile first !
    Développeur & co-fondateur de appSoluce ! - développement de solutions mobiles cross-platform

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 493
    Points
    493
    Par défaut
    Je nage en plein délire là:

    J'ai tout coché dans Projet>Options>Compilateur>Option de syntaxe et là le code compile parfaitement.

    Je redécoche petit à petit pour voir de quelle option ça vient et maintenant ça compile tout le temps

    Bref merci à tous ceux qui ont bien voulu se prendre la tête, si quelqu'un a une idée de ce qui a pu se passer je prend sinon je passe en résolu dans l'après midi...
    Mobile first !
    Développeur & co-fondateur de appSoluce ! - développement de solutions mobiles cross-platform

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

Discussions similaires

  1. Transtypage (string) -> (int)
    Par Soundboy39 dans le forum Langage
    Réponses: 2
    Dernier message: 28/06/2013, 09h54
  2. Pchar => DLL (String manip) => Pchar showmessage
    Par Steff2 dans le forum Delphi
    Réponses: 2
    Dernier message: 21/07/2007, 15h04
  3. débutant : envoi d'un String par socket impossible
    Par 2tsiris dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/02/2007, 18h17
  4. String et PChar
    Par od.dev dans le forum Delphi
    Réponses: 4
    Dernier message: 04/01/2007, 10h34
  5. [debutant] transtypage string en int
    Par melvar dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2006, 16h08

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