【发布时间】:2011-04-10 17:06:19
【问题描述】:
我只想分发一个 .exe,但是,我希望它在运行时将一些嵌入式图像资源提取到用户硬盘驱动器。
我可以吗,如果可以,怎么做?
【问题讨论】:
标签: delphi embedded-resource extraction
我只想分发一个 .exe,但是,我希望它在运行时将一些嵌入式图像资源提取到用户硬盘驱动器。
我可以吗,如果可以,怎么做?
【问题讨论】:
标签: delphi embedded-resource extraction
使用 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 而不是字符串名称。
【讨论】:
HInstance 是一个全局变量,Delphi 在程序启动时为您初始化。它在 SysInit 单元中。
创建一个TResourceStream。您将需要模块实例句柄(通常为当前 EXE 文件的 SysInit.HInstance,或者您从 LoadLibrary 或 LoadPackage 获得的任何内容)、资源类型(例如 rt_Bitmap 或 rt_RCData),以及资源名称或数字 ID。然后调用流的SaveToFile方法。
【讨论】:
try
if not Assigned(Bitmap)
then
Bitmap := TBitmap.Create();
Bitmap.LoadFromResourceName(HInstance,SRC);
except
on E:Exception do
ShowMessage(e.Message);
end;
然后将位图保存到磁盘。
【讨论】:
如果您需要使用资源本身,这可能也会派上用场。 Delphidabbler / ResourceFiles
【讨论】: