gpt4 book ai didi

delphi - 可以使用 VirtualProtect 更改 Delphi 中的资源吗?

转载 作者:行者123 更新时间:2023-12-02 05:32:55 26 4
gpt4 key购买 nike

我正在 D2010 中进行简单的本地化工作。我正在处理表单上的所有字符串,因为 ETM 似乎超出了我的需求,其他第 3 方工具也是如此......(尽管我目前不太确定!)

下面用于更改 Const.pas 字符串的代码是否可以安全地更改标准消息框上的按钮标签?

procedure HookResourceString(rs: PResStringRec; newStr: PChar);
var
oldprotect: DWORD;
begin
VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
rs^.Identifier := Integer(newStr);
VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;

const
NewOK: PChar = 'New Ok';
NewCancel: PChar = 'New Cancel';

Procedure TForm.FormCreate;
begin
HookResourceString(@SMsgDlgOK, NewOK);
HookResourceString(@SMsgDlgCancel, NewCancel);
end;

最佳答案

是的,应该没问题,但我有一些意见:

  • 确保一次仅从一个线程调用 HookResourceString 函数。如果两个线程同时调用它,您最终可能会恢复错误的权限。

  • 对于多线程,请确保在其他线程可能尝试加载资源字符串时不要使用此代码。 LoadResString 读取 Identifier 字段两次,并且两次的值需要相同。

  • 无需将新值声明为类型化常量。普通的真常数就可以了。 (编译器知道它们需要是 PChar,因为它们作为 PChar 参数的实际参数传递。)

关于delphi - 可以使用 VirtualProtect 更改 Delphi 中的资源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2229699/

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