如何解决从资源.res文件加载文本会产生奇怪的字符
基于this问题,我想知道如何解决出现奇怪字符的问题,甚至将文本文件另存为Unicode。
function GetResourceAsPointer(ResName: PChar; ResType: PChar; out Size: LongWord): Pointer;
var
InfoBlock: HRSRC;
GlobalMemoryBlock: HGLOBAL;
begin
Result := nil;
InfoBlock := FindResource(hInstance,ResName,ResType);
if InfoBlock = 0 then
Exit;
Size := SizeofResource(hInstance,InfoBlock);
if Size = 0 then
Exit;
GlobalMemoryBlock := LoadResource(hInstance,InfoBlock);
if GlobalMemoryBlock = 0 then
Exit;
Result := LockResource(GlobalMemoryBlock);
end;
function GetResourceAsstring(ResName: pchar; ResType: pchar): string;
var
ResData: PChar;
ResSize: Longword;
begin
ResData := GetResourceAsPointer(ResName,ResType,ResSize);
SetString(Result,ResData,ResSize);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetResourceAsstring('TESTANDO','TXT'));
end;
解决方法
您正在使用SizeOfResource()
,它返回的大小以字节为单位。
Size := SizeofResource(hInstance,InfoBlock);
,但您正在使用它,就好像它是个字符
SetString(Result,ResData,ResSize);
由于SizeOf(Char)
为2,因此您正在将实际文本后面的内容读入字符串。
解决方案显然是
SetString(Result,ResSize div SizeOf(Char));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。