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

Turbo Pascal Discussion :

Directive "external"


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Par défaut Directive "external"
    Bonjour,
    J'ai besoin de votre aide. J'ai pas su comment déclarer et appeler une procédure externe en turbo pascal sous windows (TPW)
    En fait, j'ai créé une procédure que j'ai enregistré dans un fichier .pas et dans un autre fichier (.pas bien sur) je la déclare avec l'option "external", mais je n'ai pas su utiliser cette option, ça m'affiche un message d'erreur. Vous serez gentil de m'indiquer comment utiliser cette option (explication sur la syntaxe).Merci.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 051
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    La directive external sert soit à inclure du code objet externe (par exemple, une procédure écrite en Assembleur ou en C), soit à importer de manière statique une procédure contenue dans une DLL.

    Mais je pense plutôt que ce que tu cherches à faire c'est d'inclure dans un fichier source une procédure se trouvant dans un autre fichier source.
    Si le fichier source externe ne contient que cette procédure, tu peux utiliser la directive $I dans ton source principal. Par exemple, si le source externe s'appelle externe.pas, tu peux inscrire cette directive à l'endroit adéquat dans ton source principal :
    et le compilateur fera exactement comme si les deux sources n'en faisaient qu'un.

    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]

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Par défaut
    Merci pour votre explication. Mais si je n'abuse pas de votre temps, peut tu me vérifier ce code:
    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
    program complexes;
    uses wincrt;
    type comp = record
                      x,y  : real;
                end;
     
    var  z,c,zc  : comp;
    procedure pf(pz,pc:comp; var f:comp);
        begin
             f.x := pz.x * pz.x - pz.y * pz.y;
             f.y := 2 * pz.x * pz.y;
             f.x := f.x + pc.x;
             f.y := f.y + pc.y;
        end;
     
     
    begin
         $I ext_comp.pas /I 'c:\';
         readln(z.x,z.y,c.x,c.y);
         pf(z,c,zc);
         writeln(zc.x:5:2,zc.y:5:2);
         complexe(zc.x,zc.y);
         ext_comp(zc.x,zc.y);
    end.
    La procédure "ext_comp.pas" contient le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure complexe(pz,pc:real);
        begin
             if pc>0      then writeln('z = ',pz:4:1,' + ',pc:4:1,' i')
             else if pc<0 then writeln('z = ',pz:4:1,' - ',abs(pc):4:1,' i')
             else if pc=0 then writeln('z = ',pz:4:1);
        end.
    La procédure que je veux appeler c'est: "ext_comp.pas" et elle est dans : "c:\"

  4. #4
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 051
    Billets dans le blog
    2
    Par défaut
    L'utilisation de la directive $I est :
    (avec les accolades).
    Mais, en fait, quelle est la raison de garder cette procédure dans un autre fichier source ?
    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]

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 190
    Par défaut
    C'est vrai que dans cet exemple ça n'a pas de sens, mais c'est pour comprendre le principe.
    Après correction le compilateur m'affiche le message d'erreur suivant:
    " Error 118:Include files are not allowed here " ????

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Vea,

    Attention à la définition de ton type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type comp = record
                      x,y  : real;
                end;
    qui recoupe un type prédéfini de TP, d'où risques de confusion.

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