我已使用exe
函数将资源文件附加到现有UpdateResource
文件。
我该如何提取它?
修改
这是我将资源文件附加到现有exe文件的代码:
Uses Classes, Windows, SysUtils, Dialogs;
Type
TBuffer = Array[0..0] of Byte;
PBuffer = ^TBuffer;
Var
FS : TFileStream;
ResourceHandle : THandle;
DataLength : DWord;
Data : PBuffer;
Ok : Boolean;
Begin
ResourceHandle := BeginUpdateResource(pChar('d:\someexefile.exe'), False);
IF (ResourceHandle <> 0) Then
Begin
FS := TFileStream.Create('d:\somebitmap.bmp', fmOpenRead);
FS.Seek(0, soFromBeginning);
DataLength := FS.Size;
GetMem(Data, DataLength);
FS.Read(Data^, DataLength);
FS.Free;
Ok := True;
IF (not UpdateResource(ResourceHandle, RT_RCDATA, pChar('MyNewResource'), LANG_SYSTEM_DEFAULT{MakeLangID(LANG_NEUTRAL, SUBLANG_NEUTRAL)}, Data, DataLength)) Then Ok := False;
IF (not EndUpdateResource(ResourceHandle, False)) Then Ok := False;
IF (Ok) Then ShowMessage('Update of resources successful!')
Else ShowMessage('Update of resources failed!');
FreeMem(Data);
End;
End.
答案 0 :(得分:7)
使用LoadLibraryEx
传递LOAD_LIBRARY_AS_IMAGE_
RESOURCE
加载模块,然后使用TResourceStream.SaveToFile
保存资源。
我当然假设您不想从正在运行的可执行文件中提取资源。如果是这种情况,您可以直接进入TResourceStream.SaveToFile
。
答案 1 :(得分:3)
您可以使用多种工具:
使用DelphiDabbler从代码中获取。
或使用TResourceStream
类。这个问题解释了如何使用它:How can I extract a resource into a file at runtime?