delphi - 如何获取Delphi资源字符串的字符串表资源id?

标签 delphi internationalization delphi-xe2 resourcestring

在 Delphi 中,您可以声明要存储在模块资源部分的字符串表中的字符串。

resourcestring
  rsExample = 'Example';

在编译时,Delphi会为其分配一个ID并将其存储在字符串表中。

有没有办法检索声明为资源字符串的字符串的 ID?

原因是我使用了一个与 gnugettext 类似的包。 System.pas 中的某些函数(如 LoadResString)已被 Hook ,因此当我在表达式中使用资源字符串时,它将被替换为不同的字符串(翻译)。当然,这非常方便,但有时我需要资源字符串的原始(未翻译)文本。

当我能够检索字符串的资源 ID 时,我可以调用 LoadString API 来获取原始文本,而不是翻译后的文本。

最佳答案

要获取资源字符串的资源 ID,可以将字符串的地址转换为 PResStringRec输入然后访问Identifier值。

尝试这个示例

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

resourcestring
  rsExample  = 'Example';
begin
  try
    Writeln(rsExample);
    Writeln(PResStringRec(@rsExample)^.Identifier);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  readln;
end.

关于delphi - 如何获取Delphi资源字符串的字符串表资源id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679697/

相关文章:

delphi - 如何在 Delphi XE2 中处理 OnTimer 事件?

delphi - 如何确保 RTTI 可用于某个类而不实例化它?

delphi - 如何识别哪些代码正在生成 "' ' 不是有效的浮点值”错误对话框

windows - 如何使用 Windows API 将菜单背景渐变复制或复制到位图上?

delphi - 为什么 CM_CONTROLLISTCHANGE 对间接父控件执行?

php - 在一行中将数​​组插入数据库

java - Apache struts国际化和本地化问题

Delphi Xe2 VCL 样式和网络浏览器

delphi - 如何写入正在读取的文件?

c - 单个 C 代码中的 printf 和 wprintf