问题
I want to distribute only a single .exe, however, at runtime I would like it to extract some embedded image resources to the users hard disk drive.
Can I, and if so, how?
回答1:
Use Delphi's TResourceStream. It's constructor will find and load the resource into memory, and it's SaveToFile method will do the disk write.
Something similar to this should work:
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;
If you can use the resource ID instead of name, it's a little less memory. In that case, you'd resplace Create with CreateFromID, and supply the numeric ID rather than the string name.
回答2:
Create a TResourceStream. You'll need the module instance handle (usually SysInit.HInstance
for the current EXE file, or else whatever you get from LoadLibrary
or LoadPackage
), the resource type (such as rt_Bitmap
or rt_RCData
), and either the resource name or numeric ID. Then call the stream's SaveToFile method.
回答3:
try
if not Assigned(Bitmap)
then
Bitmap := TBitmap.Create();
Bitmap.LoadFromResourceName(HInstance,SRC);
except
on E:Exception do
ShowMessage(e.Message);
end;
And then save the Bitmap to disk.
回答4:
Maybe this might come in handy too if you need to work with the resources itself. Delphidabbler / ResourceFiles
来源:https://stackoverflow.com/questions/3684465/how-can-i-extract-a-resource-into-a-file-at-runtime