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 :

Appel dans un programme Delphi d'une DLL développée en C++


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut Appel dans un programme Delphi d'une DLL développée en C++
    Bonjour,

    J'ai un exemple simple de DLL C++ (A.dll) dont le fichier header est décrit ci-dessous :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //A.h
    #ifndef ADLL_EXPORTS
    #define ADLL_EXPORTS
    #endif
     
    #if defined( ADLL_EXPORTS)
        #define ADLL_API __declspec(dllexport) 
    #else
        #define ADLL_API __declspec(dllimport) 
    #endif
     
     
    extern "C" ADLL_API void __cdecl  run(void);

    Lorsque je fais un appel de la DLL à partir de mon programme de manière dynamique, la fonction "run" est chargée et exécutée :
    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
     
    var
      Form1: TForm1;
      xMainPrc:  procedure; cdecl ;
     
    implementation
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      a:integer;
      handle : THandle;
    begin
      handle := LoadLibrary('A.dll');
      if handle <> 0 then
      begin
        @xMainPrc := GetProcAddress(handle, 'run');
        if @xMainPrc <> nil then
        begin
          MessageBox(0,'Function Loaded', 0, 0);
          xMainPrc();
        end;
      end;
    end;
    Par contre, quand l'appel est statique, j'ai un message m'indiquant que le point d'entrée de la fonction run est introuvable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    path='A.dll' ;
    procedure run();cdecl;external path;
     
    var
      Form1: TForm1;
     
    implementation
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      run;
    end;
    Pouvez vous m'indiquer s'il vous plaît où se situe mon erreur dans l'appel statique de la DLL ?

    Merci

  2. #2
    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 430
    Points
    28 430
    Par défaut
    je ne vois pas d'erreur (à part le mot clé CONST manquant devant "path")...c'est surprenant.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut
    Il est intéressant de comprendre pourquoi cela en fonctionne pas en statique mais je te conseille vivement de tout faire en dynamique, cela permet de mieux gérer l'absence de la DLL, de pouvoir lancer ton programme en mode bridé au lieu qu'il plante par manque de dépendance
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/12/2015, 17h00
  2. Problème utilisation DLL C++ dans un programme Delphi
    Par NGeVtC87 dans le forum Langage
    Réponses: 11
    Dernier message: 21/12/2015, 17h24
  3. Comment intégrer une image dans un programme Delphi
    Par DanCode dans le forum Débuter
    Réponses: 8
    Dernier message: 03/03/2010, 13h06
  4. Dll en c++ dans un programme delphi
    Par wikers dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2005, 15h39
  5. DLL Visual C++ appelée dans un programme Visual Basic
    Par marseillais57 dans le forum MFC
    Réponses: 7
    Dernier message: 21/07/2005, 14h57

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