Bonjour,
Un petit problème amusant dans une fonction : un paramètre entier change de valeur dans le code suivant...
mais ceci se passe fort bien !?!?!?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function lyRead(id: PSQLite3_File; Data: PByteArray; Size: integer; Offset: int64): integer; cdecl; var SizeRead: integer; begin ShowMessage('Enter Read'); Seek(id^.F_File, Offset); BlockRead(id^.F_File, Data, Size, SizeRead); // Size à lire = 100 if SizeRead<>Size // SizeRead vaut 100, mais Size ne vaut plus 100 !!! then raise Exception.Create('Size Read Error') // => le test me jette else Result:=SQLITE_OK; end;
tout en notant que l'examen de la valeur de Size après le BlockRead vaut dans les 2 cas 1713399156, et que la définition de la fonction est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 function lyRead(id: PSQLite3_File; Data: PByteArray; Size: integer; Offset: int64): integer; cdecl; var SizeRead: integer; temp: integer; begin ShowMessage('Enter Read'); Seek(id^.F_File, Offset); temp:=Size; // voici une variable BlockRead(id^.F_File, Data, Size, SizeRead); if SizeRead<>temp // bien constante !!! then raise Exception.Create('Size Read Error') else Result:=SQLITE_OK; // tout arrive... end;
où le paramètre Count est passé par valeur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Procedure BlockRead(var f:File;var Buf;count:Longint;var Result:Longint);
Partager