Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Delphi in C++ Konvertieren - Strukturen (https://www.delphipraxis.net/86086-delphi-c-konvertieren-strukturen.html)

Converter 8. Feb 2007 21:24


Delphi in C++ Konvertieren - Strukturen
 
Hallo, ich habe da ein kleines großes Problem :-D :
Ich möchte gerne ein DelphiProgramm in ein C++-Programm umwandeln.
Das klappt auch ganz gut, bis ich zu Klassen und Strukturen gekommen bin.
ich habe in Delphi dieses hier:

type
PImageDosHeader = ^TImageDosHeader;
TImageDosHeader = packed record // DOS .EXE header
e_magic : Word; // Magic number
e_cblp : Word; // Bytes on last page of file
e_cp : Word; // Pages in file
e_crlc : Word; // Relocations
e_cparhdr : Word; // Size of header in paragraphs
e_minalloc: Word; // Minimum extra paragraphs needed
e_maxalloc: Word; // Maximum extra paragraphs needed
e_ss : Word; // Initial (relative) SS value
e_sp : Word; // Initial SP value
e_csum : Word; // Checksum
e_ip : Word; // Initial IP value
e_cs : Word; // Initial (relative) CS value
e_lfarlc : Word; // File address of relocation table
e_ovno : Word; // Overlay number
e_res : array [0..3] of Word; // Reserved words
e_oemid : Word; // OEM identifier (for e_oeminfo)
e_oeminfo : Word; // OEM information; e_oemid specific
e_res2 : array [0..9] of Word; // Reserved words
_lfanew : Longint; // File address of new exe header
end;

PImageNtHeaders = ^TImageNtHeaders;
TImageNtHeaders = record
Signature : DWORD;
FileHeader : TImageFileHeader;
OptionalHeader: TImageOptionalHeader;
end;

In der Hauptfunktion:
Resource: Pointer;
Resource := LockResource(LoadResource(0, FindResource(0, 'Image', 'EXE')));
NtHeaders: PImageNtHeaders;
NtHeaders := PImageNtHeaders(Cardinal(Resource) + Cardinal(PImageDosHeader(Resource)._lfanew));

Wie kann ich das jetzt in C++ bringen?
Die Strukturen ahbe ich schon übernommen mit:
struct TImageDosHeader
{
WORD e_magic;
WORD e_cblp;
WORD e_cp;
WORD e_crlc;
WORD e_cparhdr;
WORD e_minalloc;
WORD e_maxalloc;
WORD e_ss;
WORD e_sp;
WORD e_csum;
WORD e_ip;
WORD e_cs;
WORD e_lfarlc;
WORD e_ovno;
WORD e_res[3];
WORD e_oemid ;
WORD e_oeminfo;
WORD e_res2[9];
long int _lfanew;
};
struct TImageNtHeaders
{
DWORD Signature;
TImageFileHeader FileHeader;
TImageOptionalHeader OptionalHeader;
};

Die Resource habe ich auch hinbekommen, aber wie kann ich jetzt dieses Pointerstrukturen in C++ bringen, ich bin echt am verzweifeln!
Danke schon mal an alle, die sich bemühen.

Chris P 8. Feb 2007 21:31

Re: Delphi in C++ Konvertieren - Strukturen
 
Für die Lesbarkeit wären die Delphi-Tags sehr hilfreich...

Converter 9. Feb 2007 01:42

Re: Delphi in C++ Konvertieren - Strukturen
 
Hat sich alles erledigt, mit Punkten und Pfeilen
also X->Y.Z und ganz viel OllyDebug XD.

Muehle 9. Feb 2007 07:16

Re: Delphi in C++ Konvertieren - Strukturen
 
also einen Pointer in C definierst du so :

Delphi :
PImageDosHeader = ^TImageDosHeader

C:

PtrDosHdr *TImageDosHeader; /* Pointer auf Struktur TImageDosHeader hat Eigenschaft int_lfanew */
PtrDosHdr=null; /* Impl. nicht vergessen */
PtrDosHdr=malloc(iGroesse); // Speicher reservieren

//Zugriff erfolgt dann so :
PtrDosHdr->int_lfanew=0;

//oder identisch für C-Spez.s :
(*PtrDosHdr).int_lfanew=0; // . Operator hat in C Vorrang vor * Operator

ste_ett 9. Feb 2007 08:01

Re: Delphi in C++ Konvertieren - Strukturen
 
Zitat:

Zitat von Converter
Delphi-Quellcode:
  e_res: array [0..3] of Word;
  e_res2: array [0..9] of Word;
Code:
  WORD e_res[3];
  WORD e_res2[9];

Da hast du ein Element vergessen. :)

"0..3" sind 4 Elemente.
"0..9" sind 10 Elemente.

Bei C/C++ gibt man die Gesamtanzahl der Elemente an.
ALso müsste es so heissen:
Code:
  WORD e_res[4];
  WORD e_res2[10];
- edit -

Bsp.:

Code:
typedef struct _MYSTRUCT
{
  DWORD a;
  DWORD b;
  DWORD c;
} MYSTRUCT, *PMYSTRUCT;
Die Struktur kann als "MYSTRUCT" angesprochen werden.
Pointer auf diese Struktur ist vom Typ "PMYSTRUCT".


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.

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