Bonsoir,
Il y a dans ce qui suit, quelquechose que je ne comprends pas, illustré par 2 cas qui me semblent contradictoires:
1. Cas de l'API CreateProcess:
1a. Déclaration de TStartUpInfo dans windows.pas:
1b. La compilation du code suivant est OK:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 type PStartupInfo = ^TStartupInfo; _STARTUPINFOA = record cb: DWORD; lpReserved: Pointer; ...; end; {$EXTERNALSYM _STARTUPINFOA} TStartupInfo = _STARTUPINFOA; STARTUPINFO = _STARTUPINFOA; {$EXTERNALSYM STARTUPINFO}
=> Comment se fait-il que sinfo soit accepté alors qu'un pointeur sur
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 procedure TForm1.Button2Click(Sender: TObject); var sinfo:TStartUpInfo; pinfo:TProcessInformation; begin CreateProcess ('C:\winnt\calc.exe', NIL, NIL, NIL, False, 0, NIL, NIL, sinfo, pinfo); end;
sinfo est normalement attendu en 8ème paramètre ? (sinfo est de
type TStartupInfo, pas PStartupInfo ! Idem au passage pour pinfo !)
2. Cas de l'API CreateFile:
2a. Déclaration de TSecurityAttributes dans windows.pas:
2b. La compilation du code suivant n' est pas OK ([Error] Unit3.pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 type PSecurityAttributes = ^TSecurityAttributes; _SECURITY_ATTRIBUTES = record nLength: DWORD; lpSecurityDescriptor: Pointer; bInheritHandle: BOOL; end; {$EXTERNALSYM _SECURITY_ATTRIBUTES} TSecurityAttributes = _SECURITY_ATTRIBUTES; SECURITY_ATTRIBUTES = _SECURITY_ATTRIBUTES; {$EXTERNALSYM SECURITY_ATTRIBUTES}
(36): Incompatible types: '_SECURITY_ATTRIBUTES'
and 'PSecurityAttributes'):
=> A priori, on utilise là aussi un type TSecurityAttributes alors qu'un
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 procedure TForm1.Button1Click(Sender: TObject); var Security_Attributes:TSecurityAttributes; begin CreateFile ('C:\Temp', 0, 0, Security_Attributes, 0, 0, 0); end;
pointeur (PSecurityAttributes) est attendu... on est donc dans le
même cas que précédemment mais cette dois le compilateur râle... à
mon avis à juste titre !
Mon étonnement me paraîtra stupide une fois que j'aurai compris... en attendant, c'est probablement vous qui le trouvez stupide !
Merci d'avoir la gentillesse de ne pas vous moquer et de m'aider à comprendre !
Merci d'avance,
Drooxy
Partager