Einzelnen Beitrag anzeigen

oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#1

C-Funktion mit Pointern in Delphi nachbilden

  Alt 1. Jul 2005, 15:32
Hi!

Die folgende C-Funktion möchte ich äquivalent in Delphi abbilden:

Code:
CV_INLINE void cvmSet( CvMat* mat, int i, int j, double val )
{
    ((double*)(mat->data.ptr + (size_t)mat->step*i))[j] = (double)val;
}
CvMat ist eine Matrix-Struktur (siehe unten), dessen Elemente mit der Funktion einzeln belegt werden sollen. i ist die Zeile, j die Spalte und val der einzutragende Wert.

Hier mein Versuch:

Code:
procedure cvmSet(var mat: P_CvMat; i: Integer; j: Integer; val: Double);
var
  PTmpDouble: PDouble;
begin
  PTmpDouble := PDouble(PChar(mat.data.ptr) + mat.step * i);
  Inc(PTmpDouble, j);
  PTmpDouble^ := val;
end;
Die CvMat-Struktur habe ich durch die Hilfe von NicoDE in diesem Topic ja schon umgesetzt bekommen. Vielen Dank nochmal dafür!

Code:
type
  P_CvMat = ^CvMat;
  CvMat = record
    type_       : Integer;
    step       : Integer;
    (* for internal use only *)
    refcount   : PInteger;
    data       : record
      case Integer of
        0: (ptr : PByte);
        1: (s  : PSmallInt);
        2: (i  : PInteger);
        3: (fl : PSingle);
        4: (db : PDouble)
    end;
    case Integer of
      0: (rows : Integer);
      1: (height: Integer;
    case Integer of
      0: (cols : Integer);
      1: (width : Integer))
  end;
Das Step steht für die Breite einer Martixzeile in Bytes. ptr zeigt auf den Inhalt.

Mein Problem besteht nun darin, dass ich die Elemente einer 3x3-Matrix mit Werten belege und dann wieder auslese, wobei sich die Werte komplett verändert haben.

Irgendeine Idee?

Gruß,
oXmoX
  Mit Zitat antworten Zitat