AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ --> Delphi übersetzen

Ein Thema von toms · begonnen am 16. Jan 2005 · letzter Beitrag vom 25. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#1

C++ --> Delphi übersetzen

  Alt 16. Jan 2005, 15:31
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.
Angehängte Dateien
Dateityp: cpp bandtoolbarctrlfindimpl_148.cpp (8,1 KB, 21x aufgerufen)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 15:37
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 15:42
z.B hier
Code:
  CComBSTR testid(searchID.length()+1,(const char*)searchID);
   CComBSTR testtag(5,"SPAN");
Thomas
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 16:19
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?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 16:48
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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 17:35
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
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 17:44
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 von Robert Marquardt:
searchID ist offensichtlich ein C++ String.
Ist nur noch die Frage ob STL string oder CString!

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 von Chewie:
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 von Chewie:
Außer natürlich, der Cast-Operator ist überladen
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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 17:48
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
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#9

Re: C++ --> Delphi Übersetzen

  Alt 16. Jan 2005, 17:54
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
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.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: C++ --> Delphi übersetzen

  Alt 16. Jan 2005, 18:33
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)
Angehängte Dateien
Dateityp: pas bandtoolbarctrl_112.pas (7,9 KB, 4x aufgerufen)
Thomas
  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 21:23 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