Delphi-PRAXiS
Seite 2 von 2     12   

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)

Assarbad 16. Jan 2005 18:58

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

Zitat von toms
Code:
IHTMLDocument2 *lpHtmlDocument

Habe noch nicht soviel mit Interfaces in Delphi gearbeitet. IMO ist der Typ IHTMLDocument2 aber schon ein Pointer. Die C++-Syntax sagt nix weiter als daß lpHtmlDocument ein Pointer auf den Typ IHTMLDocument2 ist.

Zitat:

Zitat von toms
Code:
if(!lpHtmlDocument)
    return;
so ?
Delphi-Quellcode:
 
if lpHtmlDocument = nil then
   Exit;

Ja!

Zitat:

Zitat von toms
Code:
IUnknown *lpUnk;
IEnumVARIANT *lpNewEnum;

Siehe 1.)

Zitat:

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

Hier wurde vom Autor offenbar die besch***en lesbare alte C-Casting-Syntax genommen. Die neue C++-Syntax entspricht in etwa der von Delphi, außer daß man Typen auch inline deklarieren kann (dann müssen sie wie hier in Klammern stehen). Lies es so:

Code:
(IDispatch*)(frame).QueryInterface(IID_IHTMLWindow2, (void**)(&elem));
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.

Code:
(void**)(&elem)
wäre in Delphi wohl ungefähr:
Delphi-Quellcode:
var elem:Pointer

toms 25. Jan 2005 12:51

Re: C++ --> Delphi übersetzen
 
Habe leider immer noch nicht begriffen, wie das zu uebersetzen ist:

Delphi-Quellcode:
CComBSTR testid(searchID.length()+1,(const char*)searchID);
habe mal einen Anfang gemacht:


... := 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:
varElement.pdispVal->QueryInterface(IID_IHTMLElement,(void**)&lpElement);
soweit habe ich:
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:
lpElement->put_outerHTML(innerText);
Problem:

{var
lpElement: IHTMLElement;}

put_outerHTML erkennt Delphi nicht!

Assarbad 25. Jan 2005 13:29

Re: C++ --> Delphi übersetzen
 
Delphi-Quellcode:
CComBSTR testid(searchID.length()+1,(const char*)searchID);
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.
Delphi-Quellcode:
var
testid:WideString;
searchID:String;
begin
  testid := searchID;
.
.
.
Code:
testtag(5, 'SPAN');
Keine Ahnung ... dazu müßte man den Code drumherum sehen. Es kann von Constructor über Macro bis Funktion alles sein.

Code:
{lpUnk: IUnknown;}

 if (SUCCEEDED(lpAllElements.get__newEnum(&lpUnk))&& lpUnk ! = nil)
SUCCEEDED ist ein Macro, das IMO auf
Delphi-Quellcode:
Ergebnis = S_OK
checkt.

Versuch hier mal:
Delphi-Quellcode:
var
 varElement: OleVariant;
 lpElement: IHTMLElement;

varElement.pdispVal.QueryInterface(IID_IHTMLElement, Pointer(lpElement));
Keine Garantie, daß irgendwas davon hilft. Ich habe leider nicht genug Zeit um ausführlicher zu helfen.

OregonGhost 25. Jan 2005 14:01

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

Zitat von Assarbad
Code:
{lpUnk: IUnknown;}

 if (SUCCEEDED(lpAllElements.get__newEnum(&lpUnk))&& lpUnk ! = nil)
SUCCEEDED ist ein Macro, das IMO auf
Delphi-Quellcode:
Ergebnis = S_OK
checkt.

Da muss ich korrigieren:
Code:
#define SUCCEEDED(Status)    ((HRESULT)(Status) >= 0)
Zitat:

put_outerHTML erkennt Delphi nicht!
Hat man in Delphi nicht SmartPointer? In dem Fall ist outerHTML eine Eigenschaft und du kannst ihr direkt etwas zuweisen, probier mal.

toms 25. Jan 2005 14:03

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

Zitat von OregonGhost
Zitat:

put_outerHTML erkennt Delphi nicht!
Hat man in Delphi nicht SmartPointer? In dem Fall ist outerHTML eine Eigenschaft und du kannst ihr direkt etwas zuweisen, probier mal.

Klar, so geht's!


Zitat:

Zitat von "Assarbad
Versuch hier mal:
Delphi-Quellcode:
var
 varElement: OleVariant;
 lpElement: IHTMLElement;

varElement.pdispVal.QueryInterface(IID_IHTMLElement, Pointer(lpElement));
Keine Garantie, daß irgendwas davon hilft. Ich habe leider nicht genug Zeit um ausführlicher zu helfen.

Funktioniert leider genausowenig


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 Uhr.
Seite 2 von 2     12   

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