问题描述
基于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));