Bonjour à tous,
j'ai une dll qui contient un thread, tout ce passe bien le thread marche comme il faut mais cependant lors du dechargement de la dll par l'application, cela génère un exception. J'ai fait pas mal de tests dans tout les sens possible mais la je bloque. Donc je suis revenu au basse et j'ai créé un exe et une dll minimum permettant de reporduire le problème. Pourtant même avec ça, je ne vois pas d'ou viens cette fichue exception. Donc je viens ici avec l'immense espoir que quelqu'un puisse m'aider et me dire ce qui ne va pas. c'est surement pas grand chose mais la j'ai beau ouvrir les yeux, je ne vois rien.
Voici le code de l'appli:
et celui de la 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 unit uTest2; interface uses Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm3 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.Button1Click(Sender: TObject); var libHwnd: HWnd; begin libHwnd := LoadLibrary('InitDLL.dll'); if libHwnd = 0 then begin memo1.Lines.Add('Could not find the dll file!'); EXIT; {EXIT} end else begin memo1.Lines.Add('dll file find!'); end; Sleep(1000); Application.ProcessMessages; freelibrary(libHwnd); memo1.Lines.add('Unload OK'); end; end.
bon ben je crois qu'on peux pas faire plus simple comme code.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 unit myDLL2; interface uses Windows, SysUtils, Classes; type TDllThread = class(TThread) private protected procedure Execute; override; end; var DllThread: TDllThread = NIL; implementation procedure TDllThread.Execute(); {----------------------------------------------------------------------------- Procedure: Execute Date: 13-nov.-2008 Arguments: Result: None Comment: Comment -----------------------------------------------------------------------------} var i: integer; begin i:=0; {TRAITEMENT} while (Terminated=False) do begin Sleep(10); Inc(i); end; {VALEUR DE RETOUR} ReturnValue:=1; end; (************************************) (* INITIALIZATION *) (************************************) initialization {Init thread} DllThread:=TDllThread.Create(TRUE); DllThread.FreeOnTerminate:=TRUE; {Execute thread} DllThread.Resume; (************************************) (* FINALIZATION *) (************************************) finalization Sleep(10) end.
merci à tous pour votre aide.
Partager