Bonjour,
Un petit problème amusant dans une fonction : un paramètre entier change de valeur dans le code suivant...
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;
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
Procedure BlockRead(var f:File;var Buf;count:Longint;var Result:Longint);
où le paramètre Count est passé par valeur...