Bonjour,
Je suis en Windows 10 (64 bits), Lazarus 1.8.4 et 2.0, FPC 3.0.4.
Je teste actuellement Lazarus et je désire charger dynamiquement une DLL comme je le fais habituellement en Delphi 7.
Problème :
LoadLibrary ou SafeLoadLibrary me renvoient toujours 0
Explo_dp.dll est une DLL écrite en Delphi
ZipDll.dll est une DLL trouvé sur Internet pour tester
Mes différents tests :
Exemple de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Var Handle : : THandle; // ou integer ou TLibHandle Handle:= Windows.LoadLibrary('Explo_dp.dll'); // ou FICHIER:=REPERTOIRE_APPLI(TRUE)+'Explo_dp.dll'; Handle:= Windows.LoadLibrary(PCHAR(FICHIER)); // ou Handle:= dynlibs.LoadLibrary('ZipDll.dll'); // ou Handle:=SafeLoadLibrary('ZipDll.dll');
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 PROG_LNK, // Créer un raccourci PROG_MODIF_LNK : PROCEDURE(INFO : PCHAR); {$IFDEF Windows} FUNCTION TForm1.CHARGE_DLL : BOOLEAN; VAR FICHIER : STRING; HANDLE_EXPLO_DP_DLL : THandle; BEGIN RESULT :=FALSE; FICHIER:=PROC2.REPERTOIRE_APPLI(TRUE)+'Explo_dp.dll'; // 'ZipDll.dll' HANDLE_EXPLO_DP_DLL := Windows.LoadLibrary(PCHAR(FICHIER));// Toujours 0 ??????? if HANDLE_EXPLO_DP_DLL <> 0 then begin Pointer(PROG_LNK):=Windows.GetProcAddress(HANDLE_EXPLO_DP_DLL, 'CREER_LNK'); Pointer(PROG_MODIF_LNK) := Windows.GetProcAddress(HANDLE_EXPLO_DP_DLL, 'MODIF_LNK'); RESULT:=TRUE; END ELSE BEGIN Showmessage('Il manque le fichier : '+FICHIER); END; END; {$ENDIF}
Qui peut m'aider ?
1) Pourquoi toujours 0
2) Différences entre :
Windows.LoadLibrary
dynlibs.LoadLibrary
SafeLoadLibrary
Remarque :
Explo_dp.dll contient entre autre :
CREER_LNK : pour créer un fichier LNK et en paramètre le répertoire de destination
MODIF_LNK : pour modifier un fichier LNK et en paramètre le nom du fichier LNK
Ci-joint le fichier DLL
D'avance merci
Partager