procedure SetResourceString(OldValue, NewValue: PResStringRec);
var
OldProtect: DWORD;
begin
{ 通过 VirtualProtect 修改指定数据所在区域的内存属性为可读写,该区域原来的属性保存在 OldProtect 中 }
VirtualProtect(OldValue, SizeOf(PResStringRec), PAGE_EXECUTE_WRITECOPY, @OldProtect);
{ 赋值新值 }
PResStringRec(OldValue)^ := PResStringRec(NewValue)^;
{ 恢复原内存区域内的属性 }
VirtualProtect(OldValue, SizeOf(PResStringRec), OldProtect, @OldProtect);
end;
procedure testShow;
begin
ShowMessage(SMsgDlgOK);
end;
procedure testChange;
resourcestring
test = '改变了木有';
begin
testShow;
SetResourceString(@SMsgDlgOK, @test);
testShow;
end;