2011-01-11 6 views
0

예를 들어 here, herehere의 예제를 기반으로 SVN 개정 정보를 프로젝트에 포함하려고합니다. svn 정보 호출 결과는 rev.txt (일반 ansi 파일)에 저장됩니다. 내 revinfo.rc은 다음과 같습니다Delphi 2010 : 자원을 찾을 수 없습니다 - EResNotFound

REV_TEXT TEXT rev.txt 

내 프로젝트는 다음과 같습니다

이 프로젝트는, 즉, 리소스 파일 자체가 컴파일러에 의해 위치 (또는 perphaps입니다 때문에 컴파일
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);이 실행될 때 REV_TEXT 리소스를 찾을 수 없다는 불만을 토로 EResNotFound 예외가 발생합니다. rev.txt 텍스트 파일의 내용을 포함하여 리소스 파일이 만족스럽게 컴파일되었는지 확인할 수 있습니다. 내 문제를 재현 할 수있는 사람이 있습니까?

BTW : 나는 또한 TResourceStream 생성자의 색인 된 버전을 사용하려고 시도했지만 사용하려는 색인을 알지 못합니다 (0, 1 및 2를 사용하지 않았 음).

정말 고맙습니다. :)

답변

4

코드의 문제는 라인 :

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

당신은 자원 TEXT의 동일한 유형으로 TResourceStream.Create를 호출해야합니다.

다음 코드는 작동합니다 :

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

+0

그것을 알아 냈어. 문자열 유형은 RRUZ 응답 (파일은 언급 한대로 Ansi 인코딩 파일 임)에 표시된 AnsiString이어야합니다. 원래 질문에서 MyStr을 변경하여 사람들을 잘못 이끌지 않도록했습니다. – conciliator

관련 문제