Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi nach C++ Portierung Problem (https://www.delphipraxis.net/194768-delphi-nach-c-portierung-problem.html)

DocShoe 3. Jan 2018 08:33

Delphi nach C++ Portierung Problem
 
Hallo zusammen,

ich habe eine Delphi-Unit einer Dritthersteller-Komponente, die etwa so aussieht:

Delphi-Quellcode:
TSomeClass = Class(TObject)
private
   FHandle                  : PPGconn;
   FSystem                  : Boolean;
   FLastOperationTime       : cardinal;
   ...
public
   constructor Create; // kein weiterer Konstruktor vorhanden
   destructor Destroy; Override;
   ...
end;
In weiteren .pas Dateien wird sie dann so benutzt (Zeile 5). Zeile 6 stammt von mir und dient nur zu Testzwecken.

Delphi-Quellcode:
procedure TAnotherClass.Open();
var NC1 : TSomeClass;
var NC2 : TSomeClass;
begin
   ...
   NC1 := TSomeClass( FHandle ); // Zeile 5: was passiert hier? 
   NC2 := TSomeClass.Create;         // Zeile 6: lässt sich im Einzelschritt debuggen und springt in den Konstruktor.
   ...
end;
Zeile 5:
Ich habe keine Ahnung, was da passiert. Es exsitiert kein Konstruktor, der einen Parameter akzeptiert. In den Aufruf kann ich auch nicht hineindebuggen, für mich sieht das so aus, als würde das Objekt ohne Konstruktoraufruf konstruiert und irgendwie initialisiert.
Was passiert da? Ich habe nicht mal ´ne Ahnung, wonach ich da googeln sollte.

Zeile 6:
Hier wird der Konstruktor aufgerufen und ein TSomeClass Objekt erzeugt. Ich kann per Einzelschritt in den Konstruktor springen und mir dort anschauen, was passiert. Allerdings haben die Member von NC1 und NC2 unterschiedliche Werte.

Den Aufruf in Zeile 5 möchte ich in C++ umsetzen:

Delphi-Quellcode:

TSomeClass* sc = new TSomeClass( FHandle );
das lässt sich nicht übersetzen:
"Kein passender Konstruktor zur Initialisierung von TSomeClass"

Der schöne Günther 3. Jan 2018 08:39

AW: Delphi nach C++ Portierung Problem
 
Das
Delphi-Quellcode:
NC1 := TSomeClass( FHandle );
ist kein Konstruktor, das ist ein harter Cast der Variable
Delphi-Quellcode:
FHandle
auf den Typ
Delphi-Quellcode:
TSomeClass
um ihn dann
Delphi-Quellcode:
NC1
zuzuweisen.

DocShoe 3. Jan 2018 09:06

AW: Delphi nach C++ Portierung Problem
 
Danke, das wars. :thumb:

In C++ sieht das jetzt so aus (und funktioniert):

Delphi-Quellcode:

TSomeClass* sc = reinterpret_cast<TSomeClass*>( FHandle );

Der schöne Günther 3. Jan 2018 09:41

AW: Delphi nach C++ Portierung Problem
 
Ja, die harte Konvertierung in Delphi entspricht dem
Delphi-Quellcode:
reinterpret_cast<>
. Ist trotzdem ein Verbrechen ;-)

DocShoe 3. Jan 2018 10:23

AW: Delphi nach C++ Portierung Problem
 
Jo, ist unsauber weil nicht streng typisiert. Ist aber 3rd Party, was willste da machen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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