6

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

resourcestring
  rsExample = 'Example';

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

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

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

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

4

1 回答 1

10

要获取资源字符串的资源 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.
于 2013-07-16T16:12:02.907 回答