Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: C++ zu Delphi funktion umschreiben

  Alt 5. Okt 2010, 22:17
Du kopierst einfach den gesamten Dateiinhalt in "mem" rein und läßt dann folgendes drüberlaufen
Delphi-Quellcode:
var mem: TByteDynArray;
  title_name: AnsiString
  "sonstiges": Integer;

str := mem[8] or (mem[9] shl 8);
pos := mem[12] or (mem[13] shl 8);
indx := 0;
title_name := '';
while str < Length(mem) do
begin
  if mem[str] = 0 then break;
  if not lstrcmpA(@mem[str], 'TITLE') then
  begin
    SetString(title_name, PAnsiChar(@mem[pos]));
    //title_name := Copy(title_name, 1, 63);
    break;
  end;
  while mem[str] <> 0 do inc(str);
  inc(str);
  inc(pos, mem[28 + indx] or (mem[29 + indx] shl 8));
  inc(indx, 16);
end;

// Ergebnis: title_name
hab auch glaich mal das Unicodeproblemchen der API angepaßt
und über das TByteDynArray wurde auch gleich der fehlende Resourcen-Schutzblock kompensiert (das "mem" im C-Code ist ein Pointer, dessen Speicherfreigabe nicht sichergestellt war).

@Klaus01:
- für den Resourcenschutzblock
- und unbedingt S: AnsiString , da er D2009 nutzt und das Unicode hier bestimmt negative Auswirkungen zeigt
- da, wo du keine Ahnung hast ... den letzen Befehl in eine neue Zeile und schon wird es verständlicher
(Werte/Integer/Bytes in IFs werden als "Boolean" angesehn ... <> 0)
- ich glaub swapBytes ist nicht nötig (Low, High)
- statt SmallInt lieber Word verwenden ... nicht daß man hier eventuell noch in eine Endlosschleife tappt
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Okt 2010 um 22:28 Uhr)
  Mit Zitat antworten Zitat