Mit
lstrlen(PAnsiChar(@mem[pos]))
funktionierts.
Jetzt habe ich noch eine zweite Funktion, die habe ich auch schon selber in Delphi übersetzt.
Aber leider funktioniert, das noch nicht.
Könnte mir jemand sagen wo ich hier den Fehler habe?
Die If Bedingung wird garnicht abgearbeitet.
Code:
char parse_id(char *path)
{
FILE *fp;
char str2;
int n;
fopen_s(&fp, path, "rb");
if (fp != NULL)
{
unsigned len;
unsigned char *mem=NULL;
fseek(fp, 0, SEEK_END);
len=ftell(fp);
mem= (unsigned char *) malloc(len+16);
if(!mem) {fclose(fp);}
memset(mem, 0, len+16);
fseek(fp, 0, SEEK_SET);
fread((void *) mem, len, 1, fp);
fclose(fp);
for(n=0x20;n<0x200;n+=0x20)
{
if(!strcmp((char *) &mem[n], "TITLE_ID"))
{
n= (mem[n+0x12]<<8) | mem[n+0x13];
memcpy(&str2, &mem[n], 16);
}
return str2;
}
}
}
}
Delphi-Quellcode:
function GetID(Files: string): AnsiString;
var
stream : TFileStream;
mem: TByteDynArray;
title_id: AnsiString;
str: word;
I, n: integer;
begin
stream := TFileStream.Create(Files,fmOpenRead);
SetLength(mem,stream.Size);
stream.read(mem[0],stream.Size);
n:=32;
for I := 0 to 16 do
begin
if lstrcmpA(@mem[n], 'TITLE_ID') = 0 then
begin
n:= (mem[n+18] shl 8) or mem[n+19];
Move(mem[n], title_id, 16);
Result:=title_id;
end;
n:=n+32;
end;