在Delphi中,您可以声明要存储在模块资源部分的String Table中的字符串.
- resourcestring
- rsExample = 'Example';
在编译时,Delphi将为其分配一个ID并将其存储在String表中.
有没有办法检索声明为resourcestring的字符串的ID?
原因是我使用的包与gnugettext一样. System.pas中的某些函数(如LoadResString)被挂钩,因此当我在表达式中使用resourcestring时,它将被替换为不同的字符串(转换).当然,这非常方便,但有时我需要资源字符串的原始(未翻译)文本.
解决方法
要获取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.