Salut salut, voila j'ai un petit soucis concernant le passage de paramètre à un thread.
Voila d'abord le bout de code :
Voila seulement l'addresse contenu dans param ne correspond pas du tout à l'adresse de l'instance de la classe. Donc, je voudrais savoir si quelqu'un pouvait m'éclairer sur la situation. Merci !
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 (*Déclaration dans la classe TWiimote*) class function cReadParseThreadFunction(param : Pointer) : Cardinal; virtual; stdcall; export; function bBeginAsyncRead () : Boolean; virtual; stdcall; export; (* Fonction bBeginAsyncRead *) function T_Wiimote.bBeginAsyncRead () : Boolean; stdcall; export; var read, err : DWORD; ThreadId : Cardinal; label ended; begin wiimote := self; if(not ReadFile(m_Handle, m_ReadBuff, REPORT_LENGTH, read, @m_Overlapped)) then begin err := GetLastError(); if(err <> ERROR_IO_PENDING) then begin Writeln ('WARNING : Readfile failed'); result := false; goto ended; end; //Fin condition err end; //Fin condition ReadFile if(m_ReadParseThread = 0) then begin m_ReadParseThread := THandle(BeginThread(nil, 0, Addr(T_Wiimote.cReadParseThreadFunction), Addr(self), 0, ThreadId)); result := true; ended: end; (*La fonction thread *) class function T_Wiimote.cReadParseThreadFunction(param : Pointer) : Cardinal; stdcall; export; var remote : T_Wiimote; overlapped : TOverlapped; exit_code : Cardinal; wait,time,read : DWord; label connection_lost_label; begin remote := (PT_Wiimote(param))^; overlapped := remote.m_Overlapped;
Partager