Spontanübersetzung (ohne Delphi, Syntaxfehler möglich)
Delphi-Quellcode:
procedure cvmSet(mat: P_CvMat; i, j: Integer; val: Double); {inline;}
type
PDoubleArray = ^TDoubleArray;
TDoubleArray = array [Word] of Double;
begin
PDoubleArray(Cardinal(mat.data.ptr) + Cardinal(mat.step) * i)[j] := val;
end;
mat->data.ptr ist ein Zeiger auf Elemente der Größe 1, dadurch wird für die Addition Faktor 1 verwendet (also ignoriert
).
-> in Delphi können Pointer so nicht addiert werden, deswegen der Cast auf Cardinal
(size_t)mat->step*i step wird auf einen vorzeichenlosen Typen gecastet (hart, old-style) und mit i multipliziert (warum i nicht gecastet wird weiß nicht
)
-> das gleiche auch in Delphi Language
((double* )(...))[j] das ganze wird auf einen Zeiger auf Doubles gecastet und mit dem Array-Operator auf dem j-te Element zugegriffen
-> in Delphi kann der Array-Operator so nicht verwendet werden (es gibt keinen
); deswegen wird ein Hilfstyp definiert und verwendet
Gruß Nico
ps: kommt also auf etwa das gleiche raus wie bei dir (bsi auf 'var' und die Zwischenschritte) - bleibt die Frage nach dem Problem...