2011-01-11 103 views
0

基於在例如herehere例子,here,我想包括在項目SVN版本信息。 svn信息調用的結果存儲在rev.txt(這是一個普通的ansi文件)。我revinfo.rc看起來是這樣的:德爾福2010:無法找到資源 - EResNotFound

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文本文件的內容。有沒有人能夠重現我的煩惱?我也試過使用TResourceStream構造函數的索引版本,但我不知道要使用哪個索引(嘗試0,1和2無效)。

我真的很感謝你的幫忙! :)

回答

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; 
+0

非常感謝!奇蹟般有效。 (雖然文字是用中文出來的......哦,好吧,至少還有一步。):) – conciliator 2011-01-12 07:38:34