Я хочу распространять только один .exe, однако во время выполнения я хотел бы, чтобы он извлек некоторые встроенные ресурсы изображения на жесткий диск пользователя.
Могу ли я, и если да, то как?
Я хочу распространять только один .exe, однако во время выполнения я хотел бы, чтобы он извлек некоторые встроенные ресурсы изображения на жесткий диск пользователя.
Могу ли я, и если да, то как?
Используйте TResourceStream Delphi. Его конструктор найдет и загрузит ресурс в память, а его метод 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;
Если вы можете использовать идентификатор ресурса вместо имени, это немного меньше памяти. В этом случае вы должны заменить Create на CreateFromID и предоставить числовой идентификатор, а не строковое имя.
HInstance
— это глобальная переменная, которую Delphi инициализирует для вас при запуске вашей программы. Он находится в модуле SysInit.
- person Rob Kennedy; 10.09.2010
Создайте TResourceStream
. Вам понадобится дескриптор экземпляра модуля (обычно SysInit.HInstance
для текущего EXE-файла или что-то еще, что вы получите от LoadLibrary
или LoadPackage
), тип ресурса (например, rt_Bitmap
или rt_RCData
) и либо имя ресурса, либо числовой идентификатор. Затем вызовите метод потока 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