Delphi 2010:无法找到资源 - EResNotFound

时间:2011-01-11 22:21:15

标签: delphi resources

基于例如hereherehere的示例,我正在尝试在项目中包含SVN修订信息。 svn info调用的结果存储在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.

项目编译,换句话说,资源文件本身是由编译器定位的(或perphaps它是链接器?)。无论如何;当语句TResourceStream.Create(hInstance, 'REV_TEXT', RT_RCDATA);被执行时,我得到一个EResNotFound异常,抱怨它无法找到资源REV_TEXT。我可以确认资源文件编译满意,包含rev.txt文本文件的内容。那里有谁能重现我的烦恼吗?

BTW:我也尝试使用TResourceStream构造函数的索引版本,但我不知道使用哪个索引(尝试0,1和2无效)。

非常感谢你的帮助! :)

1 个答案:

答案 0 :(得分:4)

代码中的问题是:

 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;