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

Free Pascal Discussion :

[FreePascal][Delphi] Problème de portage


Sujet :

Free Pascal

  1. #1
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut [FreePascal][Delphi] Problème de portage
    Bonjour tout le monde

    voila j'ai codé une algorithme sous Delphi , je l'ai coder d'une facon qu'on puisse l'utiliser un peut pres comme un composant (il suffit de l'ajouter dans les uses) , maintenant j'aimerais porter mon projet sous d'autre platformes(linux et MACos) pour cela j'ai choisssi FreePascal pour sa compabilitee avec Delphi et sa presence sous plusieurs platformes.

    le code a l'aire portable, la compatibilitee FreePascal / delphi aussi , seulement il reste un probleme, apres avoir indiquer a FreePascal d'accepter la syntaxe Delphi , il reste une chose que FreePascal n'accepte pas :
    Je declare une procedure de cette maniere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure xorblocks(var a,b : array of byte; size :integer);
    var
      i :integer;
    begin
      for i:=0 to size-1 do b[i]:=a[i] xor b[i];
    end;
    maintenant j'ai un pointeure de type PByte qui pointe sur un tableau de byte , exmple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    block : array [0..511] of byte;
    P       : PByte;
    begin
     P :=@block;
    for i:=0 to N do 
      begin
         xorbloks(P^,P^,16);
         inc(p,16);
      end;
    end;
    ce code et accepter sous Delphi , tandis que sous FreePascal non. Bien sure ici j'ai utiliser un pointeur sur byte comme parammetre , mais des fois j'utilise un tableau de Byte.
    La solution que j'ai envisagé est de declarer les parametres de ma fonction comme des Var (sans type precis), cela m'empecherat donc de traiter les parametres comme des tableaus .
    Ma question est donc : y'a til une option a indiquer au compilateur que j'aurait oblier , ou si non y aurait il une autre solution que celle que j'ai indiquer (car le probleme ne se pose pas que pour cette fonction , il y en a d'autres) ?

    Merci donc d'avance et bonne journee

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tu obtiens une erreur ?

    Je comprends pas trop le inc(p, 16) aussi après... Tu incrémentes des pointeurs ? On est pas en C ici
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    Oui j'incremente bien des pointeur

    et oui il me donne une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blabla.pas(986,15) Error: call by var parameters have to match exactly: Got "Byte" expected "Array Of Byte"

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Effectivement, il y a une incompatibilité de type qui n'est pas appréciée par FreePascal... Ce code marcherait sans doute sur TP (ou Delphi mais je ne saurais affirmer dans ce dernier cas...). Le seul conseil que je pourrais te donner serait de revoir ta procédure, voire même d'en faire deux : une qui n'accepte que les tableaux de bytes, et une autre qui n'accepte que les bytes... Celà dit, un byte est un tableau de byte contenant un seul élément. Pourquoi donc ne travailles-tu pas qu'avec des tableaux de bytes ?

    Autre chose : typique des programmeurs C, la manipulation de la mémoire des tableaux ! En pascal, ca ne se fait pas comme ça, on ne bidouille pas la mémoire associée aux tableaux, car le Pascal sait très bien se dévrouiller tout seul Donc on n'incrémente pas les pointeurs à la main, on les faits juste pointer à un autre endroit !

    Egalement : pas besoin de pointeur pour travailler avec des tableaux.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Un simple transtypage ne pourrait-t-il convenir ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    C'est bon, j'ai resolu le probleme en declarant les procedure qui pausaient probleme de cette maniere (parametre var ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure xorblocks(var a,b; size :integer);
    var
      i :integer;
    begin
      for i:=0 to size-1 do PByte(longint(@b)+i)^:=PByte(longint(@a)+i)^ xor PByte(longint(@b)+i)^;
    end;
    comme ca je peut utiliser ces procedure un peut partout.

    A propos du
    ca fonctione sous Delphi et FreePascal sans le Longint, et comme c'est les seules compilateurs que je veux utiliser , je ne me soucie pas.

    Par contre a propos des pointeures, je sais que je pourait tout simplement utiliser le [] du tableau (je croi que sa s'appel index), mais je prefert utiliser des pointeurs car j'ai un grand nombre de manipulations sur des tableaux , donc incrementer et decrementer despointeursc'est toujours plus facile que des innombrables I * 16 + blabla -blabla ...

    En tout cas Merci beaucoup pour vos reponces , j'ai reussi a compiler sous les deux compilateures

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Citation Envoyé par etranger
    Par contre a propos des pointeures, je sais que je pourait tout simplement utiliser le [] du tableau (je croi que sa s'appel index), mais je prefert utiliser des pointeurs car j'ai un grand nombre de manipulations sur des tableaux , donc incrementer et decrementer despointeursc'est toujours plus facile que des innombrables I * 16 + blabla -blabla ...
    C'est à tes risques et périls... Pourquoi vouloir bidouiller la mémoire, au risque de se tromper, alors que le compilateur le fait très bien ? Les pointeurs ne font pas vraiment partie de la philosophie Pascal à la base

    Les variables sans type non plus d'ailleurs !... Ta solution de var a,b n'est pas très naturelle donc
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    Merci wormful_sickfoot

    Je sais que les pointeurs ne font pas partie de la philisophie Pascal, mais des fois c'est commeme utile, dans mon cas (j'implemente l'algorithme de chiffrement AES ) les pointeurs me servent bien, et j'ai testé mon algo 36000 fois (et encore).

    Les variables sans type non plus d'ailleurs !... Ta solution de var a,b n'est pas très naturelle donc
    Des fois on est obliger de de faire des truc anormales, mais qui fonctione (j'ai jeter un coup d'oueil sur d'autres sources traitant le meme algo que moi, et c'est de la que j'ai eu l'idee.

    bonne journee

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

Discussions similaires

  1. Portage de source d'une application delphi
    Par gallas dans le forum EDI
    Réponses: 3
    Dernier message: 16/03/2006, 13h44
  2. [Free Pascal] Portage TP7 vers FreePascal
    Par DioManU dans le forum Free Pascal
    Réponses: 3
    Dernier message: 12/03/2006, 21h30
  3. portage delphi 5 -> delphi 2005 IFormDesigner
    Par mushy dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2005, 15h04
  4. [Kylix] Portage d'application Delphi vers Kylix
    Par BONNEFOI Patrick dans le forum EDI
    Réponses: 4
    Dernier message: 03/05/2005, 22h35
  5. [FP]Différences FreePascal / Delphi
    Par néo333 dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 01/11/2003, 18h34

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