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