我从外部函数(dll(接收字节数组中的宽字符串。
要将字节转换为字符串,我使用以下简单代码:
mystrvar := widestring(buffer);
其中缓冲区是字节数组。
当编译为 32 位时,它工作得很好,但是当编译为 64 位时,代码返回空字符串,而缓冲区(字节数组(在两种情况下都是相同的。
使用时也会发生同样的情况 mystrvar := string(buffer(;而 pchar(buffer( 或 pwchar(buffer( 工作。
我不使用 pwchar 的原因是;PWCHAR(buffer( 中断 00,而宽字符串(buffer( 不中断。此缓冲区(字节数组(包含由 (00( 分隔的字符串列表。
顺便说一句,请原谅我的英语不好。
使用
SetString(mystrvar,buffer,LENGTH(buffer) DIV SizeOf(WideChar));
假设
VAR
mystrvar : WideString;
buffer: ARRAY OF BYTE;
并且该"缓冲区"不包含尾随的零终止字节集。另请注意,"buffer"是一个 BYTE 数组,因此缓冲区的长度是结果字符串长度的两倍。
假设您的数组是双精度 Null 终止,您可以使用以下内容:
while Buffer^ <> WideNull do
begin
value := PWChar(Buffer);
CommaText := CommaText + value + ',';
Inc(Buffer, (Length(value) + 1));
end;