Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Malwieder von C nach Delphi

  Alt 15. Jan 2007, 10:44
Hi,
es gibt ein paar Kleinigkeiten, die Du ändern solltest. So ist int nur mindestens 32 Bit groß, sollte aber eigentlich auch in C immer der Standarddatentyp (Integer in Delphi) sein. unsigned und unsigned int solltest Du entsprechend durch Cardinal ersetzen.
Insbesondere gilt dies auch für fFlipVert und fFlipHori, bei den beiden handelt es sich um einen gemeinsamen Datentypen. Du hast also ein Cardinal, das ausreichebd groß ist um beide Variablen zu speichern. Für diese Struktur wird aber wirklich ein komplettes Cardinal verlangt.

Ich denke besser kommst Du hin mit:

Delphi-Quellcode:
type
  TFlag = record
    fFlipVert: Boolean;
    fFlipHori: Boolean;
  end;

  TBoImgDataInfoHeaderFlag = record
    case Integer of
      1: (flag: TFlag);
      2: (c: Cardinal);
  end;

  PBoImgDataInfoHeader = ^TBoImgDataInfoHeader;
  TBoImgDataInfoHeader = record
    iIdent: Cardinal;
    iDataOffset: Cardinal;
    sFlags: TBoImgDataInfoHeaderFlag;
    aStamp: Array[0..63] of Cardinal;
  end;
Hoffe ich lieg jetzt nicht auch völlig daneben.

Was deinen Fehler/Code angeht, Du weißt, dass Du in PBuffer ein Array von Zeigern erzeugst? Die Zeiger sind aber nicht initialisiert. Was genau wird denn im C-Programm hier übergeben? Da es sich um einen Puffer handelt und es offensichtlich um ein Bild geht, solltest du vielleicht einfach ein Array of Byte verwenden (Der Datentyp Char in C entspricht auch dem Byte in Delphi). In C wirst Du statt einem Array von Bytes i.d.R. eher etwas wie (Char* buffer, int bufferSize) finden. Also die Größe wird immer getrennt gespeichert (und gehört nicht direkt zum Array!). C Arrays sind nur Zeiger auf das erste Element und Du springst einfach im Speicher weiter. Du musst dabei selbst schauen, dass Du die Grenzen des Arrays nicht verletzt!

Gruß Der Unwissende
  Mit Zitat antworten Zitat