如何在运行时将资源提取到文件中?

时间:2010-09-10 12:09:17

标签: delphi embedded-resource extraction

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

我可以,如果是,如何?

4 个答案:

答案 0 :(得分:17)

使用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而不是名称,那么内存就会少一些。在这种情况下,您将使用CreateFromID替换Create,并提供数字ID而不是字符串名称。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

try
   if not Assigned(Bitmap)
   then
      Bitmap := TBitmap.Create();
   Bitmap.LoadFromResourceName(HInstance,SRC);
except
   on E:Exception do
      ShowMessage(e.Message);
end;

然后将位图保存到磁盘。

答案 3 :(得分:1)

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