Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ --> Delphi übersetzen (https://www.delphipraxis.net/38228-c-delphi-uebersetzen.html)

toms 16. Jan 2005 14:31


C++ --> Delphi übersetzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Suche jemand oder mehrere, welche mir beim Übersetzen
eines C++ Codes nach Delphi helfen.
(auch nur einzelne Funktion möglich)

Der Code findet ihr im Anhang.

SirThornberry 16. Jan 2005 14:37

Re: C++ --> Delphi Übersetzen
 
helfen ist gut *g* an welcher Stelle kommst du nicht weiter? Wenn du hier die ganze cpp postest hat das nichts mit helfen zu tun sondern mit komplett erledigen lassen.

toms 16. Jan 2005 14:42

Re: C++ --> Delphi Übersetzen
 
z.B hier
Code:
  CComBSTR testid(searchID.length()+1,(const char*)searchID);
   CComBSTR testtag(5,"SPAN");

Chewie 16. Jan 2005 15:19

Re: C++ --> Delphi Übersetzen
 
Das sind einfach die Definition zweier Objekte des entsprechenden Typs. Da Objekte in C++ Werttypen sind, werden so statische Objekte angelegt, die auf dem Stack liegen und deswegen auch nicht manuell freigegeben werden.
In Delphi geht das nicht (OK, mit den alten TurboPascal-Objekten schon, aber lass die Finger weg von denen), also musst du den Konstruktor zur Laufzeit explizit aufrufen:

Code:
CComBSTR testid(searchID.length()+1,(const char*)searchID);  /C++

test := CComBSTR.Creazte(searchId.length + 1, PChar(searchId); //Delphi
Auch wenn ich das nicht ganz kapiere. searchId ist offensichtlich ein Objekt, im zweiten Parameter wird dieses aber in einen Zeiger auf ein Zeichen gecastet.
Ich weiß zwar nicht Bescheid über den Aufbau von C++-Klassen, aber nach meinem dafürhalten wird dort der Zeiger auf die VMT übergeben? :?

Robert Marquardt 16. Jan 2005 15:48

Re: C++ --> Delphi Übersetzen
 
searchID ist offensichtlich ein C++ String.
Der typecast soll nur den korrekten Typ fuer den Konstruktor erzwingen.
Offensichtlich ist das aehnlich wie mit einem Delphi String, den man ja auch (fast) ungestraft zu einem PChar casten darf.

Chewie 16. Jan 2005 16:35

Re: C++ --> Delphi Übersetzen
 
Zitat:

Zitat von Robert Marquardt
Offensichtlich ist das aehnlich wie mit einem Delphi String, den man ja auch (fast) ungestraft zu einem PChar casten darf.

Hm, aber ein Delphi-String ist ja ein Zeiger. searchId ist aber ein statisches Objekt, sonst würde ja oben der "->"-Operator und nicht der Punktoperator stehen. Und eine Datenstruktur in einen Zeiger zu casten, bereitet mir ziemliche Bauchschmerzen :?

Außer natürlich, der Cast-Operator ist überladen :shock:

Assarbad 16. Jan 2005 16:44

Re: C++ --> Delphi Übersetzen
 
Zitat:

Zitat von Chewie
Auch wenn ich das nicht ganz kapiere. searchId ist offensichtlich ein Objekt, im zweiten Parameter wird dieses aber in einen Zeiger auf ein Zeichen gecastet.
Ich weiß zwar nicht Bescheid über den Aufbau von C++-Klassen, aber nach meinem dafürhalten wird dort der Zeiger auf die VMT übergeben? :?

Es ist der Aufruf eines Konstrukturs mit Länge und Pointer auf Zeichen als Parameter (ein literaler String wird auch immer als Pointer auf eine Zeichenkette behandelt). Sonst nix.

Zitat:

Zitat von Robert Marquardt
searchID ist offensichtlich ein C++ String.

Ist nur noch die Frage ob STL string oder CString!

Zitat:

Zitat von Robert Marquardt
Der typecast soll nur den korrekten Typ fuer den Konstruktor erzwingen.
Offensichtlich ist das aehnlich wie mit einem Delphi String, den man ja auch (fast) ungestraft zu einem PChar casten darf.

CComBSTR ist nichts weiter als ein "OLE String" ... also ein WideString. Versuchs mal mit so einem und caste den immer ...

Zitat:

Zitat von Chewie
Zitat:

Zitat von Robert Marquardt
Offensichtlich ist das aehnlich wie mit einem Delphi String, den man ja auch (fast) ungestraft zu einem PChar casten darf.

Hm, aber ein Delphi-String ist ja ein Zeiger. searchId ist aber ein statisches Objekt, sonst würde ja oben der "->"-Operator und nicht der Punktoperator stehen. Und eine Datenstruktur in einen Zeiger zu casten, bereitet mir ziemliche Bauchschmerzen :?

Die Begründung verstehe ich nicht. Wieso statisches Objekt? Es ist einfach ein Objekt. Das Casten übernimmt in C++ auch der entsprechende Operator (hier vermutlich LPCTSTR), der wenn es eindeutig ist, auch weggelassen werden darf.

Zitat:

Zitat von Chewie
Außer natürlich, der Cast-Operator ist überladen :shock:

Es gibt zum Glück meist mehrere Operatoren bei solchen Objekten. CString besitzt, wie gesagt, einen für LPCTSTR.

Übrigens ist "(const char*)" ja LPCTSTR, insofern UNICODE/_UNICODE nicht definiert sind! Die Vermutung liegt nahe, da im zweiten String ja ein ANSI-Literal verwendet wird.

Chewie 16. Jan 2005 16:48

Re: C++ --> Delphi Übersetzen
 
Zitat:

Zitat von Assarbad
Die Begründung verstehe ich nicht. Wieso statisches Objekt? Es ist einfach ein Objekt. Das Casten übernimmt in C++ auch der entsprechende Operator (hier vermutlich LPCTSTR), der wenn es eindeutig ist, auch weggelassen werden darf.

Ich meinte damit, dass dieses Objekt ein Werttyo ist und dass deswegen "in der Variable selbst" das Objekt drinnen ist. Wenn es ein Zeiger auf das Objekt wäre, hätte ich keine Bauchschmerzen, aber so...
Ich muss mich erstmal an das Typecasting-Konzept von C++ gewöhnen :roll:

Assarbad 16. Jan 2005 16:54

Re: C++ --> Delphi Übersetzen
 
Zitat:

Zitat von Chewie
Ich meinte damit, dass dieses Objekt ein Werttyo ist und dass deswegen "in der Variable selbst" das Objekt drinnen ist. Wenn es ein Zeiger auf das Objekt wäre, hätte ich keine Bauchschmerzen, aber so...
Ich muss mich erstmal an das Typecasting-Konzept von C++ gewöhnen :roll:

Aah, du meinst also, daß der Konstruktor von CComBSTR eingentlich einen STL string oder einen CString als Parameter erwarten sollte? Wäre theoretisch möglich aber dann nicht so generisch. Außerdem fiele dann der Sinn die Länge zu übergeben weg.

Da es ja Operatoren sind, die man explizit mit der Typkonversion von komplexen Klassen zu einfachen Typen beauftragen kann, ist es ja um sovieles einfacher.

toms 16. Jan 2005 17:33

Re: C++ --> Delphi übersetzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke mal soweit!

Hätte noch einige Übersetzungs Fragen.
Wie übersetzt man:

1.////////////////////////////////////////////////////////////

Code:
IHTMLDocument2 *lpHtmlDocument
2.////////////////////////////////////////////////////////////
Code:
if(!lpHtmlDocument)
    return;
so ?
Delphi-Quellcode:
 
if lpHtmlDocument = nil then
   Exit;
3.////////////////////////////////////////////////////////////

Code:
IUnknown *lpUnk;
IEnumVARIANT *lpNewEnum;
4.////////////////////////////////////////////////////////////

Code:
((IDispatch*)frame).QueryInterface(IID_IHTMLWindow2, (void**)&elem);

In der Anlage gibt's mal erste Übersetzungs-Versuche.
(hauptsächlich search & replace von gewissen Zeichen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Seite 1 von 2  1 2      

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