![]() |
Pointer aus C++ nach Delphi ???
Hallo,
folgendes Problem : Ich hab ne C++ datei und muss die nach Delphi convertieren. Nun arbeiten die ja sehr viel mit Zeigern. Ich hab also einen Zeiger definiert :
Code:
nun steht in dem C++ code irgendwo sowas :
m_pView : pointer;
m_pNext : pointer;
Code:
Nun die Frage wie ich das machen muss ?
if ((m_pView + 4) >= m_pNext)
Ich hab folgendes probiert :
Code:
if ((m_pView + 4) >= m_pNext) then // geht nich
if (DWORD(m_pView + 4) >= m_pNext) then // geht auch nicht if (Pointer(DWORD(m_pView) + 4) >= m_pNext) then // das geht aber auch nicht Ich hab keine Ahnung wie ich das machen muss. Kann mir mal jemand weiterhelfen ? Danke matthias ps: Das hier :
Code:
geht auch nicht und die Fehlermeldung von Delphi lautet :
if (Pointer(DWORD(m_pView) + 4) >= Pointer(DWORD(m_pNext)))
'Operator ist auf diesen Operandentyp nicht anwendbar' noch zur Info |
Re: Pointer aus C++ nach Delphi ???
Delphi-Quellcode:
Auf DWORDs bzw. Longwords ist der Operator ">=" anwendbar. ;)
if (DWORD(m_pView) + 4 >= DWORD(m_pNext))
|
Re: Pointer aus C++ nach Delphi ???
Hi,
also ich würde mich vom Pointerkonzept lösen, solange du es nicht aus Kompatiblitätsgründen beim Austausch von 2 Anwendungen brauchst. In Delphi gibt's für Listen (ist doch das, was du machen möchtest, oder?) TList, such einfach mal in der Hilfe danach. cu |
Re: Pointer aus C++ nach Delphi ???
Zitat:
geht ja wiedermal echt schnell !!! Danke, das funktioniert ! Ich würd da ja auch was anderes nehmen, aber ich muss die blöde C++ Datei irgendwie in Delphi nutzen. Bin schon froh das ich damit so weit gekommen bin. Vielleicht kommen noch einige Fragen....wenn Ihr dann nochmal helfen könntet ? DANKE EUCH Matthias |
Re: Pointer aus C++ nach Delphi ???
....und schon haben wir den Salat :-)
Code:
Delphi meckert hier schon bei dem call next .
// send the request
__asm { push eax call next next: pop eax mov dwError,eax pop eax } *((DWORD *) m_pView) = dwError; // DWORD Jetzt weiss ich aber wirklich nix mehr. Ihr vielleicht ? Dank Euch Matthias |
Re: Pointer aus C++ nach Delphi ???
Labels (Sprungmarken) in einem asm-Block müssen in Delphi mit @ beginnen, also so:
Delphi-Quellcode:
Der Code kommt mir allerdings seltsam vor. Wieso "call @next" wenn die Anweisungen unter @next sowieso ausgeführt werden würden... und wo ist das zugehörige "ret"...
asm
push eax call @next @next: pop eax mov dwError,eax pop eax end; |
Re: Pointer aus C++ nach Delphi ???
Hallo,
erst mal GANZ GROSSEN DANK, habs grad probiert und nix mit meckern....geht ! Aber zu Deinen Fragen kann ich Dicr echt nix sagen. Ich hab ja nich mal ne Ahnung woher Ihr immer sowas wissen könnt ? Noch was :
Code:
Das is die letzte Zeile unten.
DWORD(m_pView) := dwError;
Ich glaub zwar das das so richtig ist aber die beiden * in dem C++ machen mich ein bischen Stutzig. Stimmt das denn so ? DANKE Matthias |
Re: Pointer aus C++ nach Delphi ???
Bitte, freut mich dass ich helfen kann. :)
Was der asm-Code macht, sehe ich jetzt auch (die Speicheradresse von @next nach dwError schreiben). Zitat:
"(DWORD *) m_pView" entspricht einem Typecast, die Variable m_pView wird nun als Pointer auf ein DWORD angesehen. In Delphi wäre das "PDWORD(m_pView)". "*(...)" dereferenziert diesen Pointer, damit spricht man das Ziel an, auf das gezeigt wird, und nicht die Pointervariable selbst. In Delphi entspricht das einem angehängten "^". Komplett also:
Delphi-Quellcode:
Wenn m_pView direkt als PDWORD deklariert wäre (m_pView: PDWORD statt m_pView: Pointer), dann könnte man sich den Typecast sparen (m_pView^ := dwError). Je nachdem wie m_pView im restlichen Code benutzt wird, wäre das sinnvoll.
PDWORD(m_pView)^ := dwError;
Und sECuRE hat natürlich Recht, wäre besser wenn du den C-Stil nicht 1:1 nach Delphi übersetzt, sondern gleich "ordentlichen" Delphicode daraus machst. Aber das macht noch mehr Arbeit. |
Re: Pointer aus C++ nach Delphi ???
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöchen,
so richtig hab ich das bis jetzt noch nicht kapiert, aber ich glaube das ich da noch mehr solcher fehler drin hab und das ganze deswegen nicht so richtig funktioniert. In "richtigem" Delphi würd ich das ja gerne schreiben , aber ich bin froh wenn ich das irgendwann so hinbekomme. dafür fehlt mir einfach das wissen einerseits noch in Delphi, denn das mach ich noch nicht so sehr lange und zum anderen natürlich in C++. Damit hab ich ja noch nie was gemacht. Vieles in C++ is mir absolut schleierhaft :-) und da bin ich froh wenn ich das überhaupt hinbekomme. Du sagtest das Du nicht weisst wie mit der Variablen weiterverfahren wird. Ich hab Dir deswegen mal den completten C++ code drangehangen. Wenn Du willst kannst Du ja mal reinschauen. Hier hab ich mal noch sein einige dinge wo ich nicht so genau weiss ob ich das richtig gemacht habe. Vielleicht kannste das ja nochmal durchschauen ? Das wär echt super von Dir / Euch !! Links is immer das C++ dann ein -> und dahinter das was ich draus gemacht habe.
Code:
Vielleicht kannste Dir das nochmal anschauen ?
dwError = SendMessage(m_hWnd, WM_IPCTHREADACCESS, (WPARAM) (m_pNext - m_pView - 4), (LPARAM) m_pView); -> dwError := SendMessage(m_hWnd, WM_IPCTHREADACCESS, (DWORD(m_pNext) - DWORD(m_pView) - 4), DWORD(m_pView));
m_pNext = m_pView + 4; -> m_pNext := POINTER(DWORD(m_pView) + 4); pdw = (DWORD *) (m_pView + 4); // ?? da bin ich noch am rätseln ... Danke Matthias |
Re: Pointer aus C++ nach Delphi ???
Zitat:
Zitat:
Delphi-Quellcode:
var pdw: PDWORD;
//... pdw := PDWORD(DWORD(m_pView) + 4); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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 by Thomas Breitkreuz