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