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 :

Définir des fonctions d'après des fonctions existantes


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Maker
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maker
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Définir des fonctions d'après des fonctions existantes
    Bonjour à tous,

    Désolé pour le titre pourri j'arrivais pas bien à expliquer succinctement mon besoin.

    Je suis entrain de développer un protocole de dialogue sur liaison série entre mon PC et un équipement que j'ai développé
    et j'aimerais écrire une librairie de fonctions "le plus élégamment" du monde, sans écrire 40 fois la même chose.

    En gros pour faire simple, j'ai écris des fonctions bas niveau de dialogue, et maintenant j'aimerais écrire des fonctions par dessus du genre :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    interface
     
    function Commande1():boolean;
    function Commande2():boolean;
    function Commande3():boolean;
    function Commande4(out parametre_sortie: String):boolean;
    function Commande5(out parametre_sortie: String):boolean;
     
    implementation
     
    function Commande1():boolean;
    begin
       result:= FonctionBasNiveau1('ma_syntax_commande_1');
    end;
     
    function Commande2():boolean;
    begin
       result:= FonctionBasNiveau1('ma_syntax_commande_2');
    end;
     
    function Commande3():boolean;
    begin
       result:= FonctionBasNiveau1('ma_syntax_commande_3');
    end;
     
     
    function Commande4(out parametre_sortie: String):boolean;
    begin
       result:=FonctionBasNiveau2('ma_syntax_commande_4',parametre_sortie);
    end;
     
    function Commande5(out parametre_sortie: String):boolean;
    begin
       result:=FonctionBasNiveau2('ma_syntax_commande_5',parametre_sortie);
    end;

    ça fonctionne mais je trouve ça totalement inélégant !!! J'aurais préféré un fichier qui ressemble à ça dans l'esprit (la syntax est fausse biensur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    interface
     
    function Commande1():boolean; alias FonctionBasNiveau1('ma_syntax_commande_1');
    function Commande2():boolean; alias FonctionBasNiveau1('ma_syntax_commande_2');
    function Commande3():boolean; alias FonctionBasNiveau1('ma_syntax_commande_3');
    function Commande4(out parametre_sortie: String):boolean; alias FonctionBasNiveau2('ma_syntax_commande_4',parametre_sortie);
    function Commande5(out parametre_sortie: String):boolean; alias FonctionBasNiveau2('ma_syntax_commande_5',parametre_sortie);
    avoir juste une partie définition et pas d'implémentation, puisque mes fonctions ne sont que des "alias" vers d'autres fonctions avec des paramètres
    fixes !!!

    Je suis certain qu'il y a un moyen plus élégant que mon code exemple plus haut, mais j'ai passé plusieurs jours sur le net et j'ai rien trouvé.

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 871
    Points : 11 361
    Points
    11 361
    Billets dans le blog
    6
    Par défaut
    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
    interface
     
    const
      CMD_ENVOYER  = 1;
      CMD_RECEVOIR = 2;
     
    function CommandeSimple( aCommand: integer): Boolean;
     
    implementation
     
    function CommandeSimple( aCommand: integer): Boolean;
    var
      commande: string;
    begin
      Case aCommand of
       CMD_ENVOYER: commande := 'ma_syntax_commande_1';
       CMD_RECEVOIR:commande := 'ma_syntax_commande_2';
      end;
     
      Result := FonctionBasNiveauSimple( commande);
    end;

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Maker
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maker
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    c'est effectivement une manière de contourner le problème, mais j'ai pour habitude de fournir des librairies ou chaque fonctionnalité a une fonction delphiassociée afin de faciliter la lecture et l'utilisation.

    pour avoir des codes du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Initialisation();
     
    DemarrageAlim();
     
    PilotageInstrument1();

    je trouve cela plus lisible que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    EquipementDialogue(INIT);
     
    EquipementDialogue(START_ALIM);
     
    EquipementDialogue(INSTRUMENT_1);

    mais c'est une question d'habitude... je veux surtout savoir s'il y a un moyen de limiter mon code à la section interface ou non. C'est juste histoire d'améliorer encore ma connaissance du language.

    Je te remercie pour ton aide.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    Rien ne t'empêche d'utiliser les mêmes noms de fonction.

    Une unité Headers avec les exports qui fait référence à une unité bas niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    unit Headers;
     
    uses BasNiveau;
     
    function Commande4(out parametre_sortie: PChar):boolean; stdcall;
    begin
      result := BasNiveau.Commande4('ma_syntax_commande_4', parametre_sortie);
    end;
     
    exports
      Commande4;
    Attention aux types de paramètre, string va coincer.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Maker
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maker
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci Andnotor, mais je ne vois pas bien l'économie au niveau codage par rapport à ce que j'écrivais déjà ? c'est aussi lourd non ?

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    il n'existe pas d'alias ou de #define sous Delphi, il faudra donc bien déclarer tout cela, par contre il peut être intéressant d'ajouter "inline" pour éviter la redirection...le seul défaut de 'inline' c'est que la fonctionne appelée doit être aussi accessible sinon tu as un warning qui t'indique que l'appel ne peut pas se faire en inline => il faut faire un uses de BasNiveau en plus de Headers.

Discussions similaires

  1. Refaire des fonctions existantes
    Par dafpp dans le forum Débuter
    Réponses: 9
    Dernier message: 19/01/2012, 13h13
  2. Réponses: 6
    Dernier message: 17/06/2011, 11h44
  3. compilateur ne reconnait pas une fonction existante
    Par loutsa dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 02/11/2008, 10h40
  4. Réponses: 4
    Dernier message: 24/04/2008, 15h46
  5. Partitionner des tables existantes
    Par zestrellita dans le forum Administration
    Réponses: 13
    Dernier message: 29/04/2004, 16h49

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