Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Von C++ nach Delphi: Speicherbereich kopieren (https://www.delphipraxis.net/142825-von-c-nach-delphi-speicherbereich-kopieren.html)

MisterNiceGuy 4. Nov 2009 12:47


Von C++ nach Delphi: Speicherbereich kopieren
 
Hi liebe Leute,
ich habe hier folgende Zeile in C++:

Code:
memcpy(pIndices, (BYTE*)(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize,(m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize);
Typenerklärung:
pIndices = Pointer
m_pBuffer = Pointer
m_dwFirstIndex = Double
m_dwLastIndex = Double
m_dwIndexSize = Double

Die Methode bewegt einen Speicherinhalt in einen anderen Speicherbereich.

Meine Frage ist nun, wie setze ich das in Delphi um?

Ich hab folgenden Ansatz:
Delphi-Quellcode:
move(ptr(cardinal(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize)^, pIndices^, (m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize);
...glabe aber, dass das Murks ist...

mleyen 4. Nov 2009 13:08

Re: Von C++ nach Delphi: Speicherbereich kopieren
 
Delphi-Quellcode:
// Für mich sieht das eher nach einem zu kopierenden Speicherbereich aus
  CopyMemory( pIndices,
    Ptr( Cardinal(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize),
    (m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize );

// ansonsten...
  MoveMemory( pIndices,
    Ptr( Cardinal(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize),
    (m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize );
Edit:
Ich seh gerade, intern ist alles das gleiche :wall:
(klar, es wird ja nicht der alte Speicher genullt, etc...)

MisterNiceGuy 4. Nov 2009 13:51

Re: Von C++ nach Delphi: Speicherbereich kopieren
 
Hm, wenn ich mal rausfinden könnte was der Unterschied zwischen Move und MoveMemory ist... In einem Buch das ich verwende wird im diesen Zusammenhang immernur Move eingesetzt.

Neutral General 4. Nov 2009 13:52

Re: Von C++ nach Delphi: Speicherbereich kopieren
 
Es gibt keinen Unterschied, außer der Art der Parameterübergabe

himitsu 4. Nov 2009 13:58

Re: Von C++ nach Delphi: Speicherbereich kopieren
 
man kann auch die Zeigerarithmetik vorhandener Typen nutzen und spart sich so doppelte Umwandlungen
Delphi-Quellcode:
MoveMemory(pIndices, PAnsiChar(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize,
  (m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize);
PAnsiChar = 1 Byte (Achtung: PWideChar multipliziert das Dazuaddierte mit 2)

MisterNiceGuy 4. Nov 2009 16:57

Re: Von C++ nach Delphi: Speicherbereich kopieren
 
@himitsu: Was meinst du denn mit PAnsiChar(Pointer) = 1 Byte? So wie ich das verstehe hole ich ja mit

Delphi-Quellcode:
ptr(cardinal(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize)^
die Quelladresse des Speicherbereichs. Aber wie soll ich mit

Delphi-Quellcode:
PAnsiChar(Pointer)
an die Adresse kommen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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