【问题标题】:embedded file into delphi exe application (not as a separate file from the appliaction)将文件嵌入到 delphi exe 应用程序中(不是作为应用程序的单独文件)
【发布时间】:2010-02-19 16:53:45
【问题描述】:

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

【问题讨论】:

  • 你误解了一些东西。在 Delphi 中,就像在所有开发环境中一样,资源是分开的在开发过程中。在你编译和链接你的程序之后,资源是in EXE 文件。您可以在 C# 中执行相同的操作,但您不会使用 FileStream 来读取它,因为您不想读取整个 EXE 文件只是为了获取嵌入的文件。
  • 另外请注意,如果您想在 Vista/Win7 上解压后运行此可执行文件,您可能需要在目标计算机上具有管理权限。

标签: delphi delphi-7


【解决方案1】:

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

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

现在,在您进行构建后,您可以使用 TResourceStream 加载这些文件之一:

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】:

    您应该能够让 Delphi 编译器将您的资源链接到您的 EXE,方法是将其作为 {$R myresource.res} 编译指示添加到项目的一个单元中。然后,您可以在需要读取它时通过调用 FindResource 来获得它的句柄。

    article 将引导您完成相应的步骤。

    【讨论】:

    • 我的问题是如何将 rec 文件添加到项目中(我不想从目录中创建指向它的链接)我希望我发布的 exe 只是一个 .exe 文件,没有任何依赖
    【解决方案3】:

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

    您可以下载worked example 演示我们在这里描述的内容 – 它使用上面的代码。压缩文件 包含一对项目。首先 是一个嵌入提供的程序 资源文件中的富文本文件。这 第二个程序包括资源 文件并在一个 丰富的编辑组件如上。

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2021-03-02
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      相关资源
      最近更新 更多