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:
Charge la dll et la fonction
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
Et voilà le code source en c++
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;
Dans le fichier .h
et dans le fichier *.cpp
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);
Faut-il faire quelque chose de spéciale à la compilation sous 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
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; }
Merci pour votre aide.
Partager