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

Lazarus Pascal Discussion :

Erreur de compilation dans le paquet IndiLaz


Sujet :

Lazarus Pascal

  1. #1
    Membre éclairé
    Erreur de compilation dans le paquet IndiLaz
    Bonjour à toutes et à tous,

    Travaillant aujourd'hui avec Lazarus 2.0.6, j'essaie la version 2.0.10.

    En compilant IndyLaz, j'obtiens l'erreur suivante :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    IdMessage.pas(831,17) Error: Operator is not overloaded: "TEncoding" = "TIdMessageEncoding"


    à la ligne 831 du fichier "IdMessage":

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
        if Encoding = meMIME then


    Une idée du problème ?

    Cordialement.

    Pierre.

  2. #2
    Modérateur

    Bonjour,
    En regardant ici, je trouve les définitions et code suivants :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TIdMessageEncoding = (meDefault, meMIME, mePlainText); // ligne 358
     
    TIdMessage = class(TIdBaseComponent)
    //...
    FEncoding: TIdMessageEncoding;
    //...
    property Encoding: TIdMessageEncoding read FEncoding write SetEncoding; // ligne 478
     
    //...
     
    procedure TIdMessage.GenerateHeader;
    //...
      if Encoding = meMIME then // ligne 811

    Je ne vois donc rien là qui justifie l'erreur signalée, qui laisse supposer qu'une propriété Encoding serait dans ton paquet d'un type différent.
    Le curseur sur la variable concernée dans l'EDI devrait te montrer son type et permettre de remonter à sa déclaration pour vérifier la compatibilité, non ?
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre éclairé
    Avec la version 2.0.6 ce même composant IndyLaz se compile sans aucun problème.

    Il me semble avoir déjà été confronté à ce problème de "overload" en passant d'une version à l'autre. Mais je ne m'en souviens plus.

    Cordialement.

    Pierre.

  4. #4
    Membre éclairé
    J'ai remplacé :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if Encoding = meMIME then


    par

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if Encoding = TEncoding(meMIME) then


    et c'est passé comme une lettre à la poste ???

    Cordialement.

    Pierre.

  5. #5
    Modérateur

    Ce message signifie qu'on n'a pas déclaré de surcharge de l'opérateur d'égalité pour indiquer au compilateur comment comparer une variété de carotte (TEncoding) et une variété de chou (TIdMessageEncoding) !
    Comme ce sont 2 énumérations, le transtypage passe et fonctionne pour peu qu'ils soient de même taille et dans le même ordre.
    Pour comprendre pourquoi ils ne sont pas du même type dans ton paquet, reste à vérifier où pointent les déclarations et si l'ordre des uses n'appelle pas le meMime de TEncoding déclaré en dernier, plutôt que celui de TIdMessageEncoding.
    Je pense que tu peux aussi résoudre le problème en préfixant la valeur : TIdMessageEncoding.meMime pour le forcer à utiliser le type souhaité.
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre éclairé
    Je comprends ce que tu veux dire.

    Pour autant, mon paquet IndyLaz étant identique dans les deux cas, le problème vient bien du changement de version ; l'une acceptant et pas l'autre certains types de transtypage ou autre.

    Cordialement.

    Pierre.

  7. #7
    Membre expert
    Salut Pierre

    Ou se trouve la déclaration de TEncoding et celle de TIdMessageEncoding ? La même unité ?
    C'est peut-être juste une question d'ordre dans les unités déclarées dans le uses. Ce qui expliquerait pourquoi tu dois transtyper.

    Pour ma part en installant le paquet "Indy10" depuis le gestionnaire de paquet en ligne pas de soucis avec Lazarus 2.0.10

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Membre éclairé
    J'ai deux PC avec Windows 10

    Sur le premier : A, j'ai Lazarus 2.0.6 sur le disque système sous C:\lazarus ; sur une disque de données dans un répertoire, j'ai le paquet IndyLaz 10.2.0.3
    Sur le second : B, j'ai Lazarus 2.0.10 sur le disque système sous C:\lazarus ; sur un disque de données dans un répertoire, j'ai recopié le paquet IndyLaz 10.2.0.3

    Sur le PC A, je vais à la ligne 831 de l'unité IdMessage et de là, pointant sur Encoding, j'obtiens :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
        property Encoding: TIdMessageEncoding read FEncoding write SetEncoding;


    qui se trouve dans la même unité IdMessage ainsi que le type "TIdMessageEncoding"

    Pointant sur "meMIME" cela me renvoie à :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      TIdMessageEncoding = (meDefault, meMIME, mePlainText);


    qui se trouve toujours dans l'unité IdMessage.


    Maintenant, sur le PC B où j'ai Lazarus 2.0.10, , je vais à la ligne 831 de l'unité IdMessage et de là, pointant sur Encoding, j'obtiens :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
        property Encoding: TEncoding read FEncoding;


    qui se trouve dans le fichier "classesh".inc et le Type TEncoding se trouvant dans le fichier "sysencodingh.inc"

    Pointant sur "meMIME" cela me renvoie à :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      TIdMessageEncoding = (meDefault, meMIME, mePlainText);


    qui se trouve toujours dans l'unité IdMessage.

    Il y a bien un problème d'unités différentes, mais mes fichiers étant identiques, c'est bien le fait d'une version ou d'une autre d'aller chercher un même type dans une unité différente.

    Cordialement.

    Pierre.

  9. #9
    Modérateur

    Petite différence de compilation conditionnelle qui conduirait à ça ? Les cibles de compilation et le processeur hôte sont-ils les mêmes ?
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Membre éclairé
    Citation Envoyé par tourlourou Voir le message
    Petite différence de compilation conditionnelle qui conduirait à ça ? Les cibles de compilation et le processeur hôte sont-ils les mêmes ?
    Bien que physiquement les processeurs de mes deux PC soient différents (AMD Ryzen 3 sur le PC A et AMD Athlon 64 sur le PC B), dans options pour le projet --> Options du compilateur, tous les paramètres sont les mêmes.

    Cordialement.

    Pierre.

  11. #11
    Membre expert
    Salut, tu es sur que ce sont les mêmes fichiers ? car je ne vois pas comment tu peux passer de

    A :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     property Encoding: TIdMessageEncoding read FEncoding write SetEncoding;


    à B :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    property Encoding: TEncoding read FEncoding;


    A moins que tu as déjà modifié précédemment le fichier sur la machine A pour une raison ou une autre, (ou sinon t'as un fantôme dans ta machine )

    Est tu sur que c'est bien ton paquet "IndyLaz" que tu avais installé sur A ?

    Chez moi, avec l'installation depuis le gestionnaire de paquet en ligne, j'ai :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    property Encoding: TIdMessageEncoding read FEncoding write SetEncoding;




    A+
    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  12. #12
    Membre éclairé
    En admettant que j'ai bidouillé le paquet IndyLaz pour pouvoir l'utiliser sur mon PC A avec Lazarus 2.0.6, je ne me vois pas le bidouiller après coup.

    J'ai un répertoire Lazarus sur un disque de données sur mon PC A dans lequel j'ai tous mes projets et tous mes composants dont IndyLaz. J'ai recopié purement et simplement ce répertoire sur mon PC B.

    Sur mon PC B, en fouillant les options de compilation des fichiers *.lpk, je me suis aperçu que pour IndyLaz, j'avais l'option : Delphi (-MDelphi). Retour sur mon PC A : c'est la même option.

    Sur mon PC B, j'ai changé cette option pour Pascal Objet - par défaut(-MObjFPC) : il me faut toujours mon transtypage pour que ça compile.

    Cordialement.

    Pierre.

  13. #13
    Membre expert
    Citation Envoyé par ChPr Voir le message
    En admettant que j'ai bidouillé le paquet IndyLaz pour pouvoir l'utiliser sur mon PC A avec Lazarus 2.0.6, je ne me vois pas le bidouiller après coup.

    J'ai un répertoire Lazarus sur un disque de données sur mon PC A dans lequel j'ai tous mes projets et tous mes composants dont IndyLaz. J'ai recopié purement et simplement ce répertoire sur mon PC B.

    Sur mon PC B, en fouillant les options de compilation des fichiers *.lpk, je me suis aperçu que pour IndyLaz, j'avais l'option : Delphi (-MDelphi). Retour sur mon PC A : c'est la même option.

    Sur mon PC B, j'ai changé cette option pour Pascal Objet - par défaut(-MObjFPC) : il me faut toujours mon transtypage pour que ça compile.

    Cordialement.

    Pierre.
    salut,
    Ok tu as ifait une copie. Mais cela n'explique pas que les ligne soient différentes. Elle ne c'est pas changée toute seule lors de la copie. N'aurais tu pas sur ta machine A installé Indy depuis OPM ? (dossier d'installation différent) Il faudrait donc vérifier exactement quel sont les dossiers des fichiers de Indy que Lazarus utilise.

    Je ne suis pas sure, mais il me semble que tu avais ouvert une discussion à l'époque sur le sujet. Faudrait la retrouver histoire de voir.

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  14. #14
    Membre éclairé
    Citation Envoyé par BeanzMaster Voir le message
    ... Ok tu as ifait une copie. Mais cela n'explique pas que les ligne soient différentes. Elle ne c'est pas changée toute seule lors de la copie. ...
    Si tu parles de cette ligne :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if Encoding = TEncoding(meMIME) then


    Je ne l'ai changée qu'après avoir fait la copie afin de régler le problème sur le PC B avec Lazarus 2.0.10. Sinon, je ne vois pas de quelle ligne tu parles.

    Citation Envoyé par BeanzMaster Voir le message
    ... Je ne suis pas sûr, mais il me semble que tu avais ouvert une discussion à l'époque sur le sujet. Faudrait la retrouver histoire de voir. ...
    C'est vrai, je vais essayer de la retrouver. Mais ce qui est évident, c'est que j'ai toujours eu des problèmes avec IndyLaz : soit à la compilation, soit à l'installation des composants ou encore au niveau de l'utilisation. Ce devait être au niveau du fichier "IdStream" dont Lazarus me disait qu'il était introuvable alors qu'il existait bien.

    J'ai trouvé celle-là, mais je pense qu'il y en a eu d'autres.

    Cordialement.

    Pierre.

  15. #15
    Membre expert
    Citation Envoyé par ChPr Voir le message
    Si tu parles de cette ligne :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if Encoding = TEncoding(meMIME) then


    Je ne l'ai changée qu'après avoir fait la copie afin de régler le problème sur le PC B avec Lazarus 2.0.10. Sinon, je ne vois pas de quelle ligne tu parles.

    non je parle de :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      property Encoding: TIdMessageEncoding read FEncoding write SetEncoding;

    et
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      property Encoding: TEncoding read FEncoding;



    Je serai toi je désinstallerais et supprimerai les fichiers sur les deux pc et j'essayerai d'installer Indy sur les 2 machines avec OPM

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  16. #16
    Membre éclairé
    Citation Envoyé par BeanzMaster Voir le message
    ... Ok tu as fait une copie. Mais cela n'explique pas que les lignes soient différentes. Elle ne s'est pas changée toute seule lors de la copie. N'aurais-tu pas sur ta machine A installé Indy depuis OPM ? (dossier d'installation différent) Il faudrait donc vérifier exactement quel sont les dossiers des fichiers de Indy que Lazarus utilise. ...
    J'ai vérifié, sur mon PC A, IndyLaz a bien été installé à partir de fichiers que j'avais récupérés de longue date.
    Par ailleurs, c'est toi qui m'a fait découvrir, il n'y a pas très longtemps qu'on pouvait le faire depuis OPM.

    Bon, mais ce n'est pas grave, je vois qu'il n'y a pas de problèmes majeurs pour passer de 2.06 à 2.010.

    Cordialement.

    Pierre.

###raw>template_hook.ano_emploi###