Einzelnen Beitrag anzeigen

Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#11

AW: C++ zu Delphi funktion umschreiben

  Alt 6. Okt 2010, 00:10
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;
  Mit Zitat antworten Zitat