Как получить идентификатор ресурса таблицы строк Delphi resourcestring?

в Delphi вы можете объявить строки, которые будут храниться в таблице строк раздела ресурсов модуля.

resourcestring
  rsExample = 'Example';

во время компиляции Delphi назначит для него идентификатор и сохранит его в таблице строк.

есть ли способ получить идентификатор строки, объявленной как resourcestring?

причина в том, что я использую пакет, который работает так же, как gnugettext. Некоторые функции в системе.pas (например, LoadResString) подключены, поэтому, когда я использую resourcestring в выражении он будет заменен другой строкой (переводом). Конечно, это очень удобно, но иногда мне нужен оригинальный (непереведенный) текст resourcestring.

когда я могу получить идентификатор ресурса строки, я могу вызвать API LoadString для получения исходного текста вместо переведенного текста.

1 ответов


чтобы получить идентификатор ресурса resourcestring, вы можете привести адрес строки к 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.