Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#2

Re: C-Funktion mit Pointern in Delphi nachbilden

  Alt 1. Jul 2005, 15:55
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...
  Mit Zitat antworten Zitat