Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ zu Delphi funktion umschreiben (https://www.delphipraxis.net/155030-c-zu-delphi-funktion-umschreiben.html)

XXcD 5. Okt 2010 23:10

AW: C++ zu Delphi funktion umschreiben
 
Mit
Delphi-Quellcode:
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;

XXcD 5. Okt 2010 23:47

AW: C++ zu Delphi funktion umschreiben
 
Ok hab das Problem gelöst.

So funktionierts:
Delphi-Quellcode:
function GetID(Files: string): AnsiString;
var
stream : TFileStream;
mem: TByteDynArray;
title_id: AnsiString;
str: word;
I: integer;
n: word;
begin
   stream := TFileStream.Create(Files,fmOpenRead);
   SetLength(mem,stream.Size);
   stream.read(mem[0],stream.Size);

n:=32;
for I := 1 to 16 do
begin
  if lstrcmpA(@mem[n], 'TITLE_ID') = 0 then
  begin
        n:= (mem[n+18] shl 8) or mem[n+19];
        SetString(title_id, PAnsiChar(@mem[n]), lstrlen(PAnsiChar(@mem[n])));
        Result:=title_id;
        break;
  end;
  inc(n, 32);
end;
Stream.Free;
end;
Vielen, Vielen Dank nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz