【问题标题】:How can I extract a resource into a file at runtime?如何在运行时将资源提取到文件中?
【发布时间】:2011-04-10 17:06:19
【问题描述】:

我只想分发一个 .exe,但是,我希望它在运行时将一些嵌入式图像资源提取到用户硬盘驱动器。

我可以吗,如果可以,怎么做?

【问题讨论】:

    标签: delphi embedded-resource extraction


    【解决方案1】:

    使用 Delphi 的 TResourceStream。它的构造函数会找到资源并将其加载到内存中,它的 SaveToFile 方法会进行磁盘写入。

    类似的东西应该可以工作:

    var
      ResStream: TResourceStream;
    begin
      ResStream := TResourceStream.Create(HInstance, 'YOURRESOURCENAME', RT_RCDATA);
      try
        ResStream.Position := 0;
        ResStream.SaveToFile('C:\YourDir\YourFileName.jpg');
      finally
        ResStream.Free;
      end;
    end;
    

    如果可以使用资源 ID 代替名称,则内存会少一些。在这种情况下,您可以将 Create 替换为 CreateFromID,并提供数字 ID 而不是字符串名称。

    【讨论】:

    • 无论操作系统告诉你什么价值,@Leonix。 HInstance 是一个全局变量,Delphi 在程序启动时为您初始化。它在 SysInit 单元中。
    【解决方案2】:

    创建一个TResourceStream。您将需要模块实例句柄(通常为当前 EXE 文件的 SysInit.HInstance,或者您从 LoadLibraryLoadPackage 获得的任何内容)、资源类型(例如 rt_Bitmaprt_RCData),以及资源名称或数字 ID。然后调用流的SaveToFile方法。

    【讨论】:

      【解决方案3】:
      try
         if not Assigned(Bitmap)
         then
            Bitmap := TBitmap.Create();
         Bitmap.LoadFromResourceName(HInstance,SRC);
      except
         on E:Exception do
            ShowMessage(e.Message);
      end;
      

      然后将位图保存到磁盘。

      【讨论】:

        【解决方案4】:

        如果您需要使用资源本身,这可能也会派上用场。 Delphidabbler / ResourceFiles

        【讨论】:

          猜你喜欢
          • 2016-03-17
          • 1970-01-01
          • 1970-01-01
          • 2017-12-06
          • 1970-01-01
          • 1970-01-01
          • 2013-01-16
          • 2011-03-01
          • 1970-01-01
          相关资源
          最近更新 更多