如何获取Delphi资源字符串的字符串表资源ID?

前端之家收集整理的这篇文章主要介绍了如何获取Delphi资源字符串的字符串表资源ID?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Delphi中,您可以声明要存储在模块资源部分的String Table中的字符串.
resourcestring
  rsExample = 'Example';

在编译时,Delphi将为其分配一个ID并将其存储在String表中.

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

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

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

解决方法

获取resourcestring的资源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相关文章