Delphi 2010: невозможно найти ресурс - EResNotFound - PullRequest
0 голосов
/ 12 января 2011

На основе примеров, например, здесь , здесь и здесь , я пытаюсь включить информацию о ревизии SVN в проект. Результат информационного вызова svn хранится в rev.txt (это простой ANSI-файл). Мой revinfo.rc выглядит так:

REV_TEXT    TEXT    rev.txt

Мой проект выглядит так:

unit rev;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;
var
  Form2: TForm2;
implementation
{$R *.dfm}
{$R revinfo.res}
procedure TForm2.Button1Click(Sender: TObject);
var
  RS : TResourceStream;
  MyStr : AnsiString;
begin
  RS := TResourceStream.Create(hInstance, 'REV_TEXT', RT_RCDATA);
  SetLength(MyStr, RS.Size);
  RS.Read(MyStr[1], RS.Size);
  RS.Free;
  Memo1.Text := MyStr;
end;
end.

Проект компилируется, другими словами, сам файл ресурсов находится компилятором (или, возможно, он является компоновщиком?). Тем не мение; когда выполняется оператор TResourceStream.Create(hInstance, 'REV_TEXT', RT_RCDATA);, я получаю исключение EResNotFound, жалуясь, что не может найти ресурс REV_TEXT. Я могу подтвердить, что файл ресурсов скомпилирован удовлетворительно и содержит текстовый файл rev.txt. Есть ли кто-нибудь, кто может воспроизвести мои проблемы?

Кстати: я также пытался использовать индексированную версию TResourceStream-конструктора, но я не знаю, какой индекс использовать (пробовал 0, 1 и 2 безрезультатно).

Я очень ценю вашу помощь! :)

1 Ответ

4 голосов
/ 12 января 2011

Проблема в вашем коде - строка:

 TResourceStream.Create(hInstance, 'REV_TEXT', RT_RCDATA);

Вы должны вызвать TResourceStream.Create с тем же типом ресурса TEXT.

Следующий код должен работать:

var
  RS : TResourceStream;
  MyStr : AnsiString;
begin
  RS := TResourceStream.Create(hInstance, 'REV_TEXT', 'TEXT');
  try
   SetLength(MyStr, RS.Size);
   RS.Read(MyStr[1], RS.Size);
  finally
    RS.Free;
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...