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 :

Déclaration forward ou external non-satistaite


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Déclaration forward ou external non-satistaite
    voilà j'ai 2 fichiers *.pas : ex : unit1.pas et unit2.pas : dans le unit 1 je crée une procédure kiki

    dans le unit2.pas j'appelle la procédure kiki pour l'exécuter (tout en l'ayant déclarée au préalable)

    au moment de la compilation il me sort "déclaration forward ou external non satisfaite"

    en gros ma question c'est : comment appeler une procédure externe au fichier unit2.pas sans avoir ce genre de message ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 149
    Points
    149
    Par défaut
    Il te faut quelque chose du style include fichier1.pas

    Ou un "header" tu sais les .h, qui contient le nom de la fonction, enfin son prototype.

  3. #3
    Invité
    Invité(e)
    Par défaut
    include ça c'est en c/c++ non ?

    là ya implementation et le fichier y est

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Soit deux fichiers unit1.pas et unit2.pas:

    Contenu de unit2.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
    16
    unit Unit2;
     
    interface
     
    uses Dialogs;
     
    procedure kiki;
     
    implementation
     
    procedure kiki;
    begin
     ShowMessage('Kiki');
    end;
     
    end.
    Contenu de unit1.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,Unit2;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      kiki; //Appel de la procédure Kiki situé dans unit2.pas
    end;
     
    end.
    J'ai rajouté dans les uses unit2.pas pour que unit1.pas puisse l'utiliser ...
    Après, c'est un simple appel!
    A+

  5. #5
    Invité
    Invité(e)
    Par défaut
    au fait je bosse avec Delphi 7 perso (je peux pas changer de compilateur)

    oui j'ai fait ça (je me suis dit d'ailleurs c'est simple)

    en fait cette procédure appartient à une classe déclarée au début de unit 1 "TMachinForm = class(TForm)" dans type

    Or dans unit 2 la classe "TTrucForm = class(TForm)" est définie : c'est dans cette unité que je déclare et que j'appelle la procédure kiki

    Quand je compile il me met : "Déclaration forward ou external non satisfaite 'TTrucForm.kiki' "

    je n'arrive pas à comprendre pourquoi il rechigne toujours à compiler

    PS : je me posais la question : il n'y aurait pas un forward ou un external qui manquerait par hasard ? et si oui où ?
    Dernière modification par Cl@udius ; 11/07/2008 à 10h11.

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Montre nous le code de l'unit2 et pourquoi celui de unit1 ...
    J'ai du mal à cerner le soucis, chez moi, D7 aussi, ce que j'ai fait fonctionne parfaitement.

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut gizmo

    Citation Envoyé par gizmo27 Voir le message
    Or dans unit 2 la classe "TTrucForm = class(TForm)" est définie : c'est dans cette unité que je déclare et que j'appelle la procédure kiki
    Si ta procédure Kiki est bien une méthode de la classe TMachinForm, tu n'as pas besoin de la déclarer une 2° fois dans Unit2.

    Depuis Unit2 il suffit de l'appeler simplement ainsi:
    Pour peu que celle-ci aie été rendu visible en la plaçant dans la partie public de la classe et que Unit1 soit présente dans les uses de Unit2.

    @+ Claudius

  8. #8
    Invité
    Invité(e)
    Par défaut
    j'ai vu que vous avez modifié un peu mon post

    ok je vais essayer ça

  9. #9
    Invité
    Invité(e)
    Par défaut
    j'y arrive pas j'en ai trop marre.

    alors j'en ai marre je vous file les codes tels quels

    voici le 1er "UxForm.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    unit UxForm;
     
    interface
     
    uses
      Windows, Messages, SysUtils;
     
    type
      TxForm = class(TForm) 
    (...)
    private
        { Private declarations }
     
      public
        { Public declarations }
      procedure regsettings;    
      end;
    (...)
    implementation
     
    uses Unit1, SystemStuff, GlobalVar, En, newregistry;
    (...)
    procedure TxForm.regsettings;
    begin 
       with TNewRegistry.Create do
       begin   
       RootKey:=HKEY_CURRENT_USER;
            // Bitrate Tab
            WriteInteger('BitMode', cbBitMode.ItemIndex);
            WriteString('BitVal', edBitVal.Text);
            WriteInteger('TB1', TrackBar1.Position);
            WriteInteger('TB2', TrackBar2.Position);
       (...)
       end;
    end;
    et voici le 2ème "En.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    unit Encode;
     
    interface
     
    uses
      Windows, Messages, SysUtils;
    type
      TFormEn = class(TForm)
    (...)
    private
        { Private declarations }   
      public
        { Public declarations }    
    end;
    (...)
    implementation
     
    uses GVr, Unit1, ShutDown, newregistry, UxForm;
    (...)
    procedure TFormEn.btpress(Sender: TObject);
    begin
    TFormEn.regsettings;
    end;
    voilà ! ma procédure kiki étant ici regsettings

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFormEn.btpress(Sender: TObject);
    begin
      // TFormEn.regsettings;
      FormEn.regsettings;
    end;
    TFormEn, là se situe l'erreur ! Il ne faut pas faire référence à la classe (TFormEn) mais à son instance FormEn.

    @+ Claudius

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    J'ai des doutes quant à la création de tes fiches.
    Tu as bien fait :
    Fichier -> Nouveau -> Fiche
    Puis tu as renommé le Name en xForm ?

    Si c'est le cas, c'est tout good!
    Ensuite, pour l'appel, tu te trompes ...

    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
    unit Encode;
     
    interface
     
    uses
      Windows, Messages, SysUtils;
    type
      TFormEn = class(TForm)
    (...)
    private
        { Private declarations }   
      public
        { Public declarations }    
    end;
    (...)
    implementation
     
    uses GVr, Unit1, ShutDown, newregistry, UxForm;
    (...)
    procedure TFormEn.btpress(Sender: TObject);
    begin
    TFormEn.regsettings;
    end;
    Ce n'est pas TFormEn.regsettings !
    Tu t'es trompé de Form !!!
    Ca deviendra ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFormEn.btpress(Sender: TObject);
    begin
    xForm.regsettings;
    end;
    Oui, note bien le xForm et non le TxForm.
    La variable xForm est déclarée dans la section var de la form TxForm :

    Chez moi :
    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
    type
      TxForm = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        procedure regsettings;
      end;
     
    var
      xForm: TxForm;
     
    implementation
     
    {$R *.dfm}
     
    procedure TxForm.regsettings;
    begin
      ShowMessage('kiki');
    end;
    Voilà!
    J'espère que ça sera tout bon ce coup ci!
    A+

  12. #12
    Invité
    Invité(e)
    Par défaut
    En tout cas merci ça a bien marché. Dire que c'est une lettre seulement qui a fait la différence.

  13. #13
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Un petit ?
    Merci

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

Discussions similaires

  1. declaration forward ou external non satisfaisante
    Par sp2308 dans le forum Débuter
    Réponses: 2
    Dernier message: 09/01/2008, 15h51
  2. Déclaration forward ou external non satisfaite
    Par manel77 dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 27/07/2007, 12h29
  3. LNK2019: symbole externe non résolu __ftol2_sse
    Par ellipse dans le forum MFC
    Réponses: 1
    Dernier message: 26/04/2006, 23h48
  4. LNK2019 symbole externe non résolu
    Par devmat dans le forum MFC
    Réponses: 3
    Dernier message: 04/01/2006, 00h14
  5. [CSS] style externe non pris en charge
    Par ravNin'- dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 26/10/2005, 00h22

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