AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Delphi in C++ Konvertieren - Strukturen
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi in C++ Konvertieren - Strukturen

Ein Thema von Converter · begonnen am 8. Feb 2007 · letzter Beitrag vom 9. Feb 2007
Antwort Antwort
Converter

Registriert seit: 8. Feb 2007
2 Beiträge
 
#1

Delphi in C++ Konvertieren - Strukturen

  Alt 8. Feb 2007, 21:24
Hallo, ich habe da ein kleines großes Problem :
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.
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Delphi in C++ Konvertieren - Strukturen

  Alt 8. Feb 2007, 21:31
Für die Lesbarkeit wären die Delphi-Tags sehr hilfreich...
  Mit Zitat antworten Zitat
Converter

Registriert seit: 8. Feb 2007
2 Beiträge
 
#3

Re: Delphi in C++ Konvertieren - Strukturen

  Alt 9. Feb 2007, 01:42
Hat sich alles erledigt, mit Punkten und Pfeilen
also X->Y.Z und ganz viel OllyDebug XD.
  Mit Zitat antworten Zitat
Muehle

Registriert seit: 24. Nov 2006
Ort: 92331 Parsberg
24 Beiträge
 
Delphi 2005 Architect
 
#4

Re: Delphi in C++ Konvertieren - Strukturen

  Alt 9. Feb 2007, 07:16
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
G.M.
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#5

Re: Delphi in C++ Konvertieren - Strukturen

  Alt 9. Feb 2007, 08:01
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".
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
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