![]() |
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. |
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.
|
Re: C++ --> Delphi Übersetzen
z.B hier
Code:
CComBSTR testid(searchID.length()+1,(const char*)searchID);
CComBSTR testtag(5,"SPAN"); |
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:
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.
CComBSTR testid(searchID.length()+1,(const char*)searchID); /C++
test := CComBSTR.Creazte(searchId.length + 1, PChar(searchId); //Delphi Ich weiß zwar nicht Bescheid über den Aufbau von C++-Klassen, aber nach meinem dafürhalten wird dort der Zeiger auf die VMT übergeben? :? |
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. |
Re: C++ --> Delphi Übersetzen
Zitat:
Außer natürlich, der Cast-Operator ist überladen :shock: |
Re: C++ --> Delphi Übersetzen
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ü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. |
Re: C++ --> Delphi Übersetzen
Zitat:
Ich muss mich erstmal an das Typecasting-Konzept von C++ gewöhnen :roll: |
Re: C++ --> Delphi Übersetzen
Zitat:
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. |
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:
2.////////////////////////////////////////////////////////////
IHTMLDocument2 *lpHtmlDocument
Code:
so ?
if(!lpHtmlDocument)
return;
Delphi-Quellcode:
3.////////////////////////////////////////////////////////////if lpHtmlDocument = nil then Exit;
Code:
4.////////////////////////////////////////////////////////////
IUnknown *lpUnk;
IEnumVARIANT *lpNewEnum;
Code:
((IDispatch*)frame).QueryInterface(IID_IHTMLWindow2, (void**)&elem);
In der Anlage gibt's mal erste Übersetzungs-Versuche. (hauptsächlich search & replace von gewissen Zeichen) |
Re: C++ --> Delphi übersetzen
Zitat:
Zitat:
Zitat:
Zitat:
Code:
Es ist nur der Typecast von "frame" nach "Pointer auf IDispatch" um dann direkt die Methode von IDispatch QueryInterface() aufzurufen und das IHTMLWindow2-Interface in "elem" zu bekommen.
(IDispatch*)(frame).QueryInterface(IID_IHTMLWindow2, (void**)(&elem));
Code:
wäre in Delphi wohl ungefähr:
(void**)(&elem)
Delphi-Quellcode:
var elem:Pointer
|
Re: C++ --> Delphi übersetzen
Habe leider immer noch nicht begriffen, wie das zu uebersetzen ist:
Delphi-Quellcode:
habe mal einen Anfang gemacht:
CComBSTR testid(searchID.length()+1,(const char*)searchID);
... := Length(searchID) + 1, (const char * )searchID); Weiter unklar ist das:
Code:
testtag(5, ’SPAN’);
Code:
{lpUnk: IUnknown;}
if (SUCCEEDED(lpAllElements.get__newEnum(&lpUnk))&& lpUnk ! = nil)
Code:
soweit habe ich:
varElement.pdispVal->QueryInterface(IID_IHTMLElement,(void**)&lpElement);
var varElement: OleVariant; lpElement: IHTMLElement; varElement.pdispVal.QueryInterface(IID_IHTMLElemen t, lpElement); jedoch erhalte ich folgende Fehlermeldung: [Error] ... Type not allowed in Variant Dispatch call
Code:
Problem:
lpElement->put_outerHTML(innerText);
{var lpElement: IHTMLElement;} put_outerHTML erkennt Delphi nicht! |
Re: C++ --> Delphi übersetzen
Delphi-Quellcode:
Ich hatte weiter oben schon gesagt, daß ein CConBSTR nichts weiter ist als ein Wrapperobjekt für OleStrings und damit WideStrings (eigtl. PWideChar). Da wir in Delphi kein Objekt dazu brauchen, sondern der WideString (obwohl kein Objekt/Klasse) reicht, sollte das so gehen.
CComBSTR testid(searchID.length()+1,(const char*)searchID);
Delphi-Quellcode:
var
testid:WideString; searchID:String; begin testid := searchID; . . .
Code:
Keine Ahnung ... dazu müßte man den Code drumherum sehen. Es kann von Constructor über Macro bis Funktion alles sein.
testtag(5, 'SPAN');
Code:
SUCCEEDED ist ein Macro, das IMO auf
{lpUnk: IUnknown;}
if (SUCCEEDED(lpAllElements.get__newEnum(&lpUnk))&& lpUnk ! = nil)
Delphi-Quellcode:
checkt.
Ergebnis = S_OK
Versuch hier mal:
Delphi-Quellcode:
Keine Garantie, daß irgendwas davon hilft. Ich habe leider nicht genug Zeit um ausführlicher zu helfen.
var
varElement: OleVariant; lpElement: IHTMLElement; varElement.pdispVal.QueryInterface(IID_IHTMLElement, Pointer(lpElement)); |
Re: C++ --> Delphi übersetzen
Zitat:
Code:
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
Zitat:
|
Re: C++ --> Delphi übersetzen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz