2010-02-19 150 views
4

我想嵌入一个文件(任何类型的)到我的EXE应用程序,并能够提取在远程使用它,我知道如何通过嵌入资源做到这一点,但我不想将文件放在应用程序目录中,我想将所有文件(如.rec)存储到我的exe文件中,在c#中可以存储为文本文件,然后读取它通过FileStream,但在Delphi中,资源文件与exe文件是分开的。 有没有解决方案来做到这一点?非常感谢!嵌入文件到delphi EXE应用程序(而不是一个单独的文件从应用程序)

+4

你误会了一些东西。在Delphi中,与所有开发环境一样,资源在开发期间是分开的*。在编译并链接你的程序之后,资源在* EXE文件中。您可以在C#中执行相同的操作,但是您不会使用FileStream来读取它,因为您不想为了获取嵌入文件而读取整个EXE文件。 – 2010-02-19 17:30:51

+0

另外请注意,如果您想在Vista/Win7上解压后运行此可执行文件,您可能需要目标机器的管理权限。 – skamradt 2010-02-19 17:50:56

回答

16

您应该创建一个.rc文件并将其添加到您的项目中。 RC文件的内容是这样的:

FIXED48     IMAGE   ..\Resources\Fixed48x48.png 
MENU16     IMAGE   ..\Resources\Menu16x16.png 
TICK   SOUND  ..\Resources\Tick.wav 
PING   SOUND  ..\Resources\Ping.wav 

现在你做一个构建完成后,您可以使用TResourceStream加载这些fikles之一:

procedure TdmReportGeneral.InsertLogo(Memo: TStringList; View: TfrView); 
var 
    S: TResourceStream; 
begin 
    if (View is TfrPictureView) and (View.Name = 'Logo') then begin 
     S := TResourceStream.Create(0, 'FIXED48', 'IMAGE'); 
     try 
      // do something useful... TfrPictureView(View).Picture.MetaFile.LoadFromStream(S); 
     finally 
      S.Free(); 
     end; 
    end; 
end; 
2

你应该能够获得德尔福编译器将您的资源添加到您的EXE中,将其作为您项目中的一个单元中的{$ R myresource.res}编译指示添加。当你需要阅读时,你可以通过调用FindResource来获得句柄。

article会引导您完成适当的步骤。

+0

我的问题是,如何将REC文件添加到项目中(我不想从目录中建立链接)我希望我发布的EXE只是一个.exe文件,没有任何依赖关系 – sam 2010-02-19 21:38:52

+0

thx to所有(吉姆McKeeth)是啊,它将被导入 – sam 2010-02-19 21:48:15

1

DelphiDabbler在这个话题上有a great article。他们甚至包括2个下载示例项目,演示如何将文件作为资源嵌入,以及如何将其读回。

你可以下载一个worked example是 证明我们这里 描述 - 它使用上面的代码。 zip文件 包含一对项目。第一个 是一个将提供的富文本文件嵌入到资源文件中的程序。 第二个程序包含资源 文件,并在上面显示富编辑组件中的富文本。

相关问题