Bonjour j'ai crée un programme qui utilise un fonction d'une dll écrite en c++ mais lors du chargement j'ai le message d'erreur "La fonction est introuvable". Voilà mais source:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
var
  Form1: TForm1;
  Fractal: TForm2;
  Fcomplexe:THandle;
  isDrawable:function(a:double;b:double):Boolean;// c'est la fonction à importer
Charge la dll et la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.FormCreate(Sender: TObject);
begin
 Fcomplexe := LoadLibrary('Fcomplexe.dll');
 if Fcomplexe = 0 then begin
 raise Exception.Create('Dll non chargé');
 end;
 @isDrawable:=GetProcAddress(Fcomplexe,'isDrawable');
 if @isDrawable=nil then
 begin
 raise Exception.Create('La fonction est introuvable');
 end;
end;
Et voilà le code source en c++
Dans le fichier .h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
 
bool DLLIMPORT isDrawable(double a,double b);
et dans le fichier *.cpp
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
36
37
38
39
40
#include "E:\programmation\delphi\fractale\dll\MainDll.h"
#include <windows.h>
#include <stdio.h>
 
/* Externs */
 
 
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason,
                       LPVOID reserved /* Not used. */ );
 
/* DllMain Results:
       TRUE on success, FALSE on failure.  */
 
BOOL APIENTRY
DllMain (
	 HINSTANCE hInst        /* Library instance handle. */ ,
	 DWORD reason           /* Reason this function is being called. */ ,
	 LPVOID reserved        /* Not used. */ )
{
 
  switch (reason)
    {
    case DLL_PROCESS_ATTACH:
      break;
 
    case DLL_PROCESS_DETACH:
      break;
 
    case DLL_THREAD_ATTACH:
      break;
 
    case DLL_THREAD_DETACH:
      break;
    }
  return TRUE;
}
bool DLLIMPORT isDrawable(double a,double b)
{
return true;
}
Faut-il faire quelque chose de spéciale à la compilation sous delphi ?
Merci pour votre aide.