Un paramètre constant qui varie ?
Bonjour,
Un petit problème amusant dans une fonction : un paramètre entier change de valeur dans le code suivant...
Code:
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; |
mais ceci se passe fort bien !?!?!?
Code:
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; |
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:
Procedure BlockRead(var f:File;var Buf;count:Longint;var Result:Longint);
où le paramètre Count est passé par valeur...