![]() |
Von C++ in Delphi - Mal wieder Pointer...
Hi, ich versuche folgende Zeile von C++ in Delphi zu übersetzen:
Code:
m_pBits und m_pMemory sind Pointer.
m_pBits = (void*)((BYTE*)(m_pMemory) + 20);
Ich verstehe die Zeile so, dass der Zeiger m_pBits nicht mehr auf m_pMemory zeigt, sondern auf m_pMemory+20. Frage ist nur, wie übersetz ich das in Delphi? Danke im Voraus :) edit:
Delphi-Quellcode:
...lässt sich kompilieren, aber ob's stimmt ist die Frage.
m_pBits := Ptr(cardinal(m_pMemory) + 20);
|
Re: Von C++ in Delphi - Mal wieder Pointer...
Kenn mich mit C zwar nicht aus, würde aber mal vermuten, dass es sich so nach Delphi übersetzen lässt:
Delphi-Quellcode:
Erklärung: VOID ist ja "nichts", also müsste void* ein untypisierter Pointer sein. BYTE* ist ein Pointer auf ein Byte, wahrscheinlich um sicher zu gehen, dass 20 Bytes nach vorne gesprungen wird und nicht 20 Integer-Breiten o.ä. (gibt's ja in Delphi bei typisierten Pointern auch). In Delphi kann man aber zu Pointern keinen Wert hinzuaddieren, daher der Typecast nach Integer.
m_pBits := Pointer(Integer(m_pMemory) + 20));
[edit] Okay, du hast ja fast das gleiche... sollte beides funktionieren, denke ich. [/edit] |
Re: Von C++ in Delphi - Mal wieder Pointer...
Mal so aus dem Kopp:
Delphi-Quellcode:
Geht das?
m_pBits := Pointer(BYTE(m_pMemory) + 20);
Roter Kasten: Nee du. :mrgreen: Warum machst du denn jetzt aus dem "Byte" einen Cardinal? ;) @NamenLozer: Ich würde aber nicht nach Integer casten, sondern nach "Byte". |
Re: Von C++ in Delphi - Mal wieder Pointer...
Zitat:
|
Re: Von C++ in Delphi - Mal wieder Pointer...
Tatsache. Gut, dann wird aus dem generischen Pointer ein Byte-Pointer. Erklärt aber immer noch nicht den Integer bzw. Cardinal. Dann bräuchten wir einen pByte...
//Edit: Hab jetzt deinen Nachtrag gelesen. Sowas geht in Delphi nicht? Hmm... |
Re: Von C++ in Delphi - Mal wieder Pointer...
Zitat:
[edit] Zu langsam... man, hier überschlagen sich ja die Ereignisse :mrgreen: [/edit] |
Re: Von C++ in Delphi - Mal wieder Pointer...
Zitat:
Was aber auch funktioniert:
Delphi-Quellcode:
oder
PByte(Cardinal(m_pMemory)+20);
Delphi-Quellcode:
oder auch
Pointer(Cardinal(m_pMemory)+20);
Delphi-Quellcode:
:mrgreen:
Pointer(PByte(Cardinal(m_pMemory)+20));
|
Re: Von C++ in Delphi - Mal wieder Pointer...
Delphi-Quellcode:
würde/sollte mit aktivierter Zeigerarithmetik funktionieren.
m_pBits := Pointer(PByte(m_pMemory) + 20);
ist wie
Delphi-Quellcode:
nur daß bei PChar-ähnlichen Typen die Zeigerarithmetik immer aktiv ist.
m_pBits := Pointer(PAnsiChar(m_pMemory) + 20);
welchen Typen hat denn m_pBits? |
Re: Von C++ in Delphi - Mal wieder Pointer...
Das Delphi so eine Pointerarithmetik nicht beherrscht ist irgendwie... bitter. Naja, hab mich noch nie so sehr mit Pointern auseinandersetzen müssen, wie jetzt im Studium in C, daher merke ich das etwas... später. :mrgreen:
//Edit: (Was ist denn heute los?) :wall: Also gehts doch? Was ein HickHack. Wie schaltet man die denn ein, und ab welcher Version geht das? Weil, ich finde einen pByte schöner als einen pAnsiChar. Bei pByte sehe ich den Bereich immerhin auf dem ersten Blick. |
Re: Von C++ in Delphi - Mal wieder Pointer...
m_pBits ist auch ein Pointer.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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