12

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

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

4

4 回答 4

19

使用 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 而不是字符串名称。

于 2010-09-10T12:44:58.647 回答
4

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

于 2010-09-10T12:45:36.277 回答
2
try
   if not Assigned(Bitmap)
   then
      Bitmap := TBitmap.Create();
   Bitmap.LoadFromResourceName(HInstance,SRC);
except
   on E:Exception do
      ShowMessage(e.Message);
end;

然后将位图保存到磁盘。

于 2010-09-10T12:45:37.557 回答
1

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

于 2010-09-10T13:39:56.660 回答