AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi C++ Struct nach Delphi portieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Struct nach Delphi portieren

Ein Thema von Zacherl · begonnen am 8. Feb 2011 · letzter Beitrag vom 8. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 09:27
Hey,

ich habe hier ein etwas komplexeres C++ Struct, welches ich gerne nach Delphi portieren würde:
Code:
struct HPOLY
{
   HPOLY() : m_nWorldIndex(0xFFFFFFFF), m_nPolyIndex(0xFFFFFFFF) {}
   HPOLY(__int32 nWorldIndex, __int32 nPolyIndex) : m_nWorldIndex(nWorldIndex), m_nPolyIndex(nPolyIndex) {}
   HPOLY(const HPOLY& hPoly) : m_nWorldIndex(hPoly.m_nWorldIndex), m_nPolyIndex(hPoly.m_nPolyIndex) {}
   
   HPOLY &operator=(const HPOLY &hOther)
   {
      m_nWorldIndex = hOther.m_nWorldIndex;
      m_nPolyIndex = hOther.m_nPolyIndex;
      return *this;
   }

   bool operator==(const HPOLY &hOther) const
   {
      return (m_nWorldIndex == hOther.m_nWorldIndex) && (m_nPolyIndex == hOther.m_nPolyIndex);
   }
   bool operator!=(const HPOLY &hOther) const
   {
      return (m_nWorldIndex != hOther.m_nWorldIndex) || (m_nPolyIndex != hOther.m_nPolyIndex);
   }
   __int32 m_nPolyIndex, m_nWorldIndex;
};
Allerdings habe ich keine Ahnung, was die wiederholte deklaration von HPOLY im Struct selbst bedeuten soll und ebenso weiß ich nicht, wie die Struct Operatoren in Delphi umgesetzt werden können.

Ich hoffe irgendein C Kenner kann mir da weiterhelfen.

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.121 Beiträge
 
Delphi 12 Athens
 
#2

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 09:42
Also, der Record selber sieht so aus, von den Daten her:
Delphi-Quellcode:
HPOLY = record
  m_nPolyIndex, m_nWorldIndex: LongInt;
end;
HPOLY() wäre wohl eine Art Constructor, welches bei Delphi-Records nicht gibt, bzw. welches nicht nötig ist, da man es ja manuell aufrufen muß, denn eine automatische Initialisierung gibt es leider nicht
Da wirst'e dir wohl besser eine Init-Prozedur draus machen müssen.

Die nächsten zwei HPOLY( sind och sowas, nut mir Parametern zur Initialisiereung,
also nochein Init, aber mit m_nPolyIndex, m_nWorldIndex: LongInt; als Parameter,
das 3. HPOLY( kannst'e eigentlich weglassen, da es nur den record kopiert, was Delphi automatisch macht.

und danach kommen dann ein paar Klassenoperatoren (Hier im Forum suchenclass operator ).

[add]
Delphi-Quellcode:
HPOLY = record
  FPolyIndex, FWorldIndex: LongInt;
  procedure Init;
  procedure Init(PolyIndex, WorldIndex: LongInt);
  procedure Init(const Source: HPOLY);
//class operator Implicit(const Source: HPOLY): HPOLY;
  class operator Equal (const Source: HPOLY): Boolean;
  class operator NotEqual(const Source: HPOLY): Boolean;
end;
Delphi-Quellcode:
HPOLY = record
  FPolyIndex, FWorldIndex: LongInt;
  class function Init: HPOLY;
  class function Init(PolyIndex, WorldIndex: LongInt): HPOLY;
  class function Init(const Source: HPOLY): HPOLY;
//class operator Implicit(const Source: HPOLY): HPOLY;
  class operator Equal (const Source: HPOLY): Boolean;
  class operator NotEqual(const Source: HPOLY): Boolean;
end;
Delphi-Quellcode:
HPOLY = record
  FPolyIndex, FWorldIndex: LongInt;
  constructor Create;
  constructor Create(PolyIndex, WorldIndex: LongInt);
  constructor Create(const Source: HPOLY);
//class operator Implicit(const Source: HPOLY): HPOLY;
  class operator Equal (const Source: HPOLY): Boolean;
  class operator NotEqual(const Source: HPOLY): Boolean;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2011 um 09:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 09:45
Vielen Dank für deine Erklärung. Dass es sich um Konstruktoren handelt, da wär ich nie drauf gekommen Hatte da eher spontan auf variante Records getippt ^^
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.121 Beiträge
 
Delphi 12 Athens
 
#4

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 09:56
Hab oben mal was nacheditiert.

PS: Warum werden beim Editieren über den Inlineeditor keine neuen Beiträge geladen, wenn zwischendurch geantwortet wurde?

Nee, das Meiste sind einfach nur "Methoden"/Funktionen.
Du kannst das Verhalten aber auch gerne in einen eigenen Variant-Typ verpacken, aber dein D2010 kennt ja schon die Record-Operatoren, so daß man es quasi fast komplett direkt übersetzen und so belassen kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2011 um 10:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 10:03
Wow danke dir recht herzlich Ich teste das zu Hause direkt mal im Einsatz. Beeinflussen class operator Felder eigentlich die Größe des Records?
Würde ich z.b. jetzt einen Record mit einer normalen Methode erstellen, wäre dieser ja 4 Bytes groß. Ich frage nur, weil dieser Record zu einer anderen Anwendung kompatibel gelesen / gespeichert werden soll. Da wäre es natürlich blöd, wenn durch die class operators die Größe verfälscht wird.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 10:08
Hallo,

Delphi-Quellcode:
type
  TTest = record
    A: Integer;
    procedure Blubb;
    class function X: Integer; static;
  end;

// SizeOf(TTest) = 4
Nein, die Größe wird nicht verändert
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 10:11
Perfekt danke dir! Konnte leider nicht selbst testen, da hier kein Delphi installiert ist

Edit: Moment das verwundert mich jetzt, dass die procedure die Größe auch nicht beeinflusst. Argh achso ne da war ich wohl in Gedanken bei den VTable Functions.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 8. Feb 2011 um 10:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#8

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 10:13
[...] wäre wohl eine Art Constructor, welches bei Delphi-Records nicht gibt [...]
Natürlich kennt Delphi in neueren Versionen erweiterte Records, die auch Konstruktoren haben können?!
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.121 Beiträge
 
Delphi 12 Athens
 
#9

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 10:37
@Deep-Sea: Njain, es kennt Konstruktoren, aber es nutzt diese nicht automatisch.

Wäre zu schön, wenn bei var X: HPOLY; Delphi automatisch den Contructor aufruft, wenn die Variable Initialisiert wird, ebenso den Destructor beim Freigeben und ein "Clone" beim Kopieren.

Technisch wäre es möglich, und ich hatte (vor)letzes Jahr Emba auch diesbezüglich einen Eintrag im QC spendiert, wo ich sogar zeigte, daß es eigentlich sehr einfach zu implementieren wäre und wo man was ändern/erweitern müßte, da Delphi die Grundvoraussetungen schon besitzt (siehe String, dynArray und Interface), aber leider gab es da nie eine Reaktion.

@Zacherl:
Nee, es ändert nicht die Größe.
Diese Operatoren und Record-Methoden sind quasi statische Prozeduren, welche nur über den Typen im Compiler verlinkt sind, aber am Typen sonst Speichertechnisch nichts verändern.
PS: virtuelle Methoden gibt es nicht, welche da was verändern/vergrößern könnten, da Records eh keine Vererbung kennen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#10

AW: C++ Struct nach Delphi portieren

  Alt 8. Feb 2011, 10:53
@himitsu:
Das stimmt natürlich - leider. Aber Konstruktoren an sich gibt es halt schon
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:55 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