Von C++ nach Delphi: Speicherbereich kopieren
Hi liebe Leute,
ich habe hier folgende Zeile in C++:
Code:
Typenerklärung:
memcpy(pIndices, (BYTE*)(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize,(m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize);
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:
...glabe aber, dass das Murks ist...
move(ptr(cardinal(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize)^, pIndices^, (m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize);
|
Re: Von C++ nach Delphi: Speicherbereich kopieren
Delphi-Quellcode:
Edit:
// 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 ); Ich seh gerade, intern ist alles das gleiche :wall: (klar, es wird ja nicht der alte Speicher genullt, etc...) |
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.
|
Re: Von C++ nach Delphi: Speicherbereich kopieren
Es gibt keinen Unterschied, außer der Art der Parameterübergabe
|
Re: Von C++ nach Delphi: Speicherbereich kopieren
man kann auch die Zeigerarithmetik vorhandener Typen nutzen und spart sich so doppelte Umwandlungen
Delphi-Quellcode:
PAnsiChar = 1 Byte (Achtung: PWideChar multipliziert das Dazuaddierte mit 2)
MoveMemory(pIndices, PAnsiChar(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize,
(m_dwLastIndex - m_dwFirstIndex + 1) * m_dwIndexSize); |
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:
die Quelladresse des Speicherbereichs. Aber wie soll ich mit
ptr(cardinal(m_pBuffer) + m_dwFirstIndex * m_dwIndexSize)^
Delphi-Quellcode:
an die Adresse kommen?
PAnsiChar(Pointer)
|
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