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 :

Passage d'une procedure à une DLL


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut Passage d'une procedure à une DLL
    Bon voila, J'essaie de passer une procedure de mon programme Delphi à une DLL (que j'ai crée)

    voici quelques extraits du code :

    1) la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Library Lib1;
     
      var DrawFunc : Procedure;
     
      procedure SetDrawFunc( P : Proc) ;
      begin
       DrawFunc:=P;
      end;
     
      ...
    2) le programme Delphi :

    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
     
     
     interface
      ...
      type
       Proc = Procedure;
     
      procedure SetDrawFunc( P : Proc);external 'Lib1.dll';
     
      ...
     
     implementation
     
      procedure draw;
      begin
       ... // effectue les taches de dessin ( en OpenGL si vous êtes curieux )
      end;
     
      procedure init;
      begin
       ...
       SetDrawFunc(draw); (* ***xxx*** *) <-- c'est la ou ca bloque !
       ...
      end;
    Le problème survient à la ligne :

    SetDrawFunc(draw); (* ***xxx*** *) <-- c'est la ou ca bloque !

    Delphi me balance un 'Project1.exe ... Access Violation : Read of address 0000000 ...' Vous connaissez la chanson.

    Quelqu'un pourrait me dépanner ? j'arrive pas à comprendre l'origine de ce problème,
    d'autant que la DLL et la procedure SetDrawFunc se chargent correctement ( j'ai essayé la méthode load-time linking ( loadLibrary) et j'ai vérifié les addresses : pas de nil).

    Merci d'avance.

    P.S -1 : C'est bien dans le forum Delphi que je dois poster ce message, où à celui de l'OpenGL ?
    P.S -2 : Vite SVP, ce genre de problèmes à la X-Files me donnent l'envie de laisse tomber
    Delphi et la programmation pour aller jouer Quake III pendant des heures !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Pour passer une procédure à une DLL, mieux vaut carrément passer un pointeur, puis transtyper ce pointeur vers le type voulu lors de l'appel.

    Démo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type
       TDrawFunc = procedure;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Library Lib1;
     
      var DrawFunc : Procedure;
     
      procedure SetDrawFunc(P : Pointer) ;
      begin
       DrawFunc:=TDrawFunc (P);
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      procedure init;
      begin
         SetDrawFunc(@Draw);
      end;
    Pas testé, mais quelque chose du genre devrait marcher.

    Vite SVP, ce genre de problèmes à la X-Files me donnent l'envie de laisse tomber
    Delphi et la programmation pour aller jouer Quake III pendant des heures !
    Dommage, la patience, c'est la qualité #1 du développeur....

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Je vais essayer ça, et on en reparlera !
    Thanks a lot.

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Merci beaucoup Reisubar, ca marche comme ca.
    En fait le problème venait de la DLL, mais comme le message d'erreur indiquait
    Project1.exe et pas le nom de la DLL, j'ai pensé que le problème venait du
    passage des paramètres. Merci quand même.

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

Discussions similaires

  1. Probleme de passage de parametres a une procedure
    Par blondelle dans le forum C++Builder
    Réponses: 8
    Dernier message: 22/10/2008, 21h28
  2. Réponses: 1
    Dernier message: 19/08/2008, 07h40
  3. passage d arguments a une procedure lancer par un menu xl
    Par patbou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/04/2008, 19h00
  4. Passage de paramètre d'une classe à une autre
    Par semenzato dans le forum C++
    Réponses: 3
    Dernier message: 21/09/2005, 13h59
  5. [C#] Passage de valeur d'une fenêtre à une autre
    Par groum999 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/09/2004, 14h12

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