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 :

un objet constante ne peut être passé comme paramètre var


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut un objet constante ne peut être passé comme paramètre var
    Bonjour,

    j'ai une fonction qui appelée seule ne génère pas d'erreur sur cet 'objet constante'. Si la même fonction est appelée dans une boucle itérant sur une TList, le même objet constante génère cette erreur. Le paramètre en question est le 1er de CreeLigneVente.

    J'ai bien lu ce lien , mais je ne vois pas en quoi il s'applique puisque je n'utilise pas une constante, ni pourquoi le même type ne passe plus dans la TList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TfrmFraisTransport.btnOKGescomClick(Sender: TObject);
    var
      DocVente : IBODocumentVente3;
    begin
     
      DocVente := FBaseGescom.FactoryDocumentVente.ReadPiece(
                  DocumentTypeVenteFacture,
                  'Num_piece');
      CreeLigneVente(DocVente, 'ZPORT', 1);
     
    end;
    Ce code ne génère pas d'erreur. Maintenant le code suivant qui accède au même DocVente mais sur un élément d'un TList ne fonctionne pas :

    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
    procedure TfrmFraisTransport.btnOKGescomClick(Sender: TObject);
    var
      DocVente : IBODocumentVente3;
      FFacturesVenteNonComptabilisees : TList<IBODocumentVente3>;
     
    begin
      FFacturesVenteNonComptabilisees := TQuery.FacturesVentesNonComptabilise(
        FBaseGescom, 1) ;
     
      for DocVente in FFacturesVenteNonComptabilisees do
      begin
        CreeLigneVente(DocVente, 'ZPORT', 1);
      end;
     
    end;
    La signature de CreeLigneVente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function CreeLigneVente(var ADocVente: IBODocumentVente3; ARefArticle: string;
      AQte: Double): IBODocumentVenteLigne3;
    La signature de IBODocumentVente3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // *********************************************************************//
    // Interface :   IBODocumentVente3
    // Indicateurs : (4544) Dual NonExtensible OleAutomation Dispatchable
    // GUID :        {D1B97437-4703-4DB6-B177-23F41957CE0D}
    // *********************************************************************//
      IBODocumentVente3 = interface(IBODocumentPart3)
        ['{D1B97437-4703-4DB6-B177-23F41957CE0D}']
        ... (snip) ...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut
    Bon,

    finalement j'ai trouvé, il faut bien passer par une variable intermédiaire Pourquoi il y en a besoin dans la TList et pas en direct, mystère.

    Le code devient :

    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
    procedure TfrmFraisTransport.btnOKGescomClick(Sender: TObject);
    var
      DocVente, DocVente2 : IBODocumentVente3;
      FFacturesVenteNonComptabilisees : TList<IBODocumentVente3>;
     
    begin
      FFacturesVenteNonComptabilisees := TQuery.FacturesVentesNonComptabilise(
        FBaseGescom, 1) ;
     
      for DocVente in FFacturesVenteNonComptabilisees do
      begin
        Docevente2 := DocVente;
        CreeLigneVente(DocVente2, 'ZPORT', 1);
      end;
     
    end;

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Ca me semble normal comme comportement.
    La variable utilisée comme itérateur d'un for, ne peut pas être modifiée.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Par défaut
    Citation Envoyé par Lung Voir le message
    Ca me semble normal comme comportement.
    La variable utilisée comme itérateur d'un for, ne peut pas être modifiée.
    Tout à fait d'accord.
    Ce qui m'étonne c'est que son compilateur lors du ctrl-f9 ne lui ai pas clairement indiqué l'erreur, ce qu'il fait chez moi.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/01/2012, 02h16
  2. Réponses: 3
    Dernier message: 04/01/2010, 19h32
  3. initialiser un ptr passé comme paramétre
    Par fkorbi dans le forum C
    Réponses: 2
    Dernier message: 30/04/2007, 14h09
  4. Réponses: 10
    Dernier message: 04/07/2006, 20h57
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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