在 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/