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] passer un tableau dynamique en paramétre ?


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut [D7] passer un tableau dynamique en paramétre ?
    Bonjour

    J'utilise la fonction Write de l'objet TcustomComPort . Quand je lui passe un tableau dynamique comme paramétre buffer , il m'envoie les adresses du tableau sur le port série !!
    Or il semble d'apres l'aide de delphi que l'on ne doit pas ( et on ne peut pas !) déférencer un tab dynamique .

    Existe t'il donc une syntaxe pour pouvoir passer un tableau dynamique en paramétre ?

    Merci d'avance

  2. #2
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    oui,

    en le déclarant comme un type.

    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
    dans le cas d'un tableau d'integer;
     
     TmyArray = Array of integer;
     
    dans la procedure receveuse :
     
    Procedure usemyarray( MyArray : TmyArray);
     
     
    la procedure d'appel :
    Var
      MyArray : TmyArray;
    begin
    UseMyArray(MyArray);
     
    End;
    autre possiblilité : passer un pointeur
    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
    17
    18
    19
    20
    21
      pMyArray = ^TmyArray;
      TmyArray = array of integer;
     
    Procedure UseMyArray( AMyArray : pMyArray);
    Var
    myArray : TmyArray;
    Begin
    MyArray := AMyArray^; // assigne le tableau pointé à celui en variable locale. attention toute modification su MyArray sera reportée sur le tableau initial.
    showmessage(inttostr (AmyArray[1]));
    End;
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var
    MyArray : TmyArray;
    begin
    SetLength(MyArray, 2);
    MyArray[0] := 1;
    MyArray[1] := 345;
    UseMyArray(@MyArray); // passe le pointeur sur le tabeau en paramètre
    SetLength(MyArray,0)
    end;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Merci pour la réponse
    Mais cette solution m'oblige à modifier l'unité Cport , ce que je voudrais éviter .
    Il y a la solution du tableau statique qui fonctionne mais elle manque singuliérement de souplesse . C'est peeut être celle que je vais utiliser en attendant.

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    salut ,

    Quel type de données passe tu ?

    Une solution est parfois de passer un TStringlist comme parametre à la place d'un tableau dynamique qui t'oblige de fixer sa taille dans ta procedure d'appel

    bye
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Tableau d'octet ( de taille variable entre 1 et 1024 ) qui sont ensuite transmis sur la liaison série.
    En écrivant cela , je crois que je vais créer un tableau statique de la taille maxi et je vais donc passer à la fonction write l'index dans le tableau plus la longueur et ca devrait résoudre mom probléme .

  6. #6
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    salut ,
    et en fesant comme çà ?
    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
    17
    18
     
    ....
    Procedure Transfert(Donnees:array of integer);
    var i:integer;
    begin
        for i:=0 to length(donnees)-1 do form1.memo1.lines.add(inttostr(donnees[i]));
    end;
     
    Procedure CalculeOctet;
    var TabOct:array of integer;
        TailleTab:integer;
        i:integer;
    begin
        TailleTab:=10; // exemple
        setlength(TabOct,TailleTab);
        for i:=0 to TailleTab-1 do TabOct[i]:=i; // chargement du tableau..
        Transfert(TabOct);
    end;
    bye
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  7. #7
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    si c'est un tableau d'octets

    pourquoi ne transformes tu pas ton tableau en string ? après tout, cà reste un tableau d'octets.

Discussions similaires

  1. Passer un tableau associatif en paramètre
    Par keul85 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/06/2007, 18h06
  2. passer un tableau 2D en paramètre de fonction
    Par akrobat dans le forum C++
    Réponses: 1
    Dernier message: 27/04/2006, 16h48
  3. Passage de tableau dynamique en paramètre
    Par Didier L dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2005, 23h04
  4. Comment passer un tableau dynamique en paramètre ?
    Par Charette dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2005, 11h28
  5. passer un tableau dynamique en parametre...
    Par annecyrond dans le forum Langage
    Réponses: 5
    Dernier message: 07/03/2003, 09h59

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