代码之家  ›  专栏  ›  技术社区  ›  RobertFrank Picarus

可以使用VirtualProtect在Delphi中更改资源吗?

  •  1
  • RobertFrank Picarus  · 技术社区  · 16 年前

    我正在D2010做一个简单的本地化工作。我正在处理表单上的所有字符串,因为ETM对于我的需求来说似乎太过分了,其他第三方工具也是如此(虽然我现在不太确定!)

    下面更改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;
    
    2 回复  |  直到 16 年前
        1
  •  4
  •   Rob Kennedy    16 年前

    • 一定要打电话给你的同事 HookResourceString

    • LoadResString Identifier 字段两次,并且两次都需要具有相同的值。

    • 打字 常数。普通的真常数很好(编译器知道它们需要是PChar,因为它们是作为PChar参数的实际参数传递的。)

        2
  •  1
  •   André    16 年前

    为什么不使用dxgettext?这是开源的,所以你至少可以看看他们是如何做到的。。。
    http://dxgettext.po.dk/