我正在尝试将下面的 C++ 代码片段转换为 Delphi:
DWORD n;
memcpy(&n, lpData, sizeof(n)); <==== the C++ data type : LPBYTE lpData = NULL;
wprintf(L"REG_DWORD - ValueName: %s, Data: %u\n", pValueName, n);
我不知道Delphi部分,我尝试过如下代码:
lpData: array of byte;
n : DWord;
// then do not know how to use
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: NativeUInt);
这是对我来说最困难的部分:
我不知道如何将
lpData
转换为指针。变量
Destination
类型是PByte
,还是不是?如何获取长度?
如何将目标值转换为
n
(Dword
类型值)?
最佳答案
动态数组已经是指针,因此下面的代码有效:
var
lpData: array of byte;
n : DWord;
begin
lpData := [$0A, $0B, $0C, $0D];
CopyMemory(@n, lpData, SizeOf(n));
Caption := Format('%x', [n]);
请注意,应初始化lpData
。
此外,字节数组;
是 C++
数据类型的可疑模拟 - 它是 Delphi 特定的托管类型。数组体可能用作存储,但总体用法可能有所不同。
LPBYTE
的直接模拟是Delphi PByte
,有时PByteArray
很方便。值得描述一下 - 你的 lpData
是如何填充的。
关于delphi - 如何在Delphi中从字节数组复制双字大小数据并将其转换为双字类型值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62336320/