gpt4 book ai didi

winapi - 将 REG_BINARY 读取到字符串

转载 作者:行者123 更新时间:2023-12-02 19:28:29 28 4
gpt4 key购买 nike

我使用此代码将二进制数据从注册表读取到字符串

function ReadBinary (RootKey: HKEY; SubKey,ValueName: WideString; var Data : String): Bool;
var
Key : HKey;
Buffer : array of char;
Size : Cardinal;
RegType : DWORD;
begin
result := FALSE;
RegType := REG_BINARY;
if RegOpenKeyExW(RootKey, pwidechar(SubKey), 0, KEY_READ, Key) = ERROR_SUCCESS then begin
if RegQueryValueExW(Key,pwidechar(ValueName),NIL,@RegType, NIL,@Size) = ERROR_SUCCESS then begin
SetLength (Buffer, Size + 1);
FillChar(Buffer, SizeOf (Buffer), #0);
if RegQueryValueExW(Key,pwidechar(ValueName),NIL,@RegType, @Buffer[0],@Size) = ERROR_SUCCESS then begin
result := TRUE;
Data := String (Buffer); // Shows empty or sometimes 1 random char.
end;
end;
end;
RegCloseKey (Key);
end;

编辑2:

它适用于固定声明的字节/字符数组

function ReadBinary (RootKey: HKEY; SubKey,ValueName: WideString; var Data : String): Bool;
var
Key : HKey;
Buffer : array [0..200] of char;
Size : Cardinal;
RegType : DWORD;
begin
result := FALSE;
RegType := REG_BINARY;
if RegOpenKeyExW(RootKey, pwidechar(SubKey), 0, KEY_READ, Key) = ERROR_SUCCESS then begin
if RegQueryValueExW(Key,pwidechar(ValueName),NIL,@RegType, NIL,@Size) = ERROR_SUCCESS then begin
FillChar(Buffer, SizeOf (Buffer), #0);
if RegQueryValueExW(Key,pwidechar(ValueName),NIL,@RegType, @Buffer,@Size) = ERROR_SUCCESS then begin
result := TRUE;
Data := String (Buffer);
end;
end;
end;
RegCloseKey (Key);
end;

我被困住了。我做错了什么以及解决方案是什么?

感谢您的帮助。

编辑:

我知道我正在从注册表中读取二进制数据。因此它可能已经被 0 终止并且可能返回错误结果。我可以保证二进制数据中没有#0字符,因为我之前在Value中写了一个长文本(带CR/LF的字符串)。

最佳答案

Buffer: array of char;

是动态字符数组,实际上就是指针变量。此字符串将指针重置为 Nil:

   FillChar(Buffer, SizeOf (Buffer), #0);

因此动态数组现在无效

要用零填充动态数组的内容,您必须使用

    FillChar(Buffer[0], SizeOf(Buffer[0]) * Length(Buffer), #0)

但这不是必需的,因为 SetLength 可以完成这项工作。

关于winapi - 将 REG_BINARY 读取到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11931573/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com