Распакуйте файл ресурса - PullRequest
4 голосов
/ 21 мая 2011

Я прикрепил файл ресурса к существующему файлу 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. 

Ответы [ 2 ]

7 голосов
/ 21 мая 2011

Используйте LoadLibraryEx, передав LOAD_LIBRARY_AS_IMAGE_ RESOURCE, чтобы загрузить модуль, а затем TResourceStream.SaveToFile, чтобы сохранить ресурс.

Я, конечно, предполагаю, что вы не хотите извлекать ресурс из запущенного исполняемого файла. Если бы это было так, вы могли бы перейти прямо к TResourceStream.SaveToFile.

3 голосов
/ 21 мая 2011

есть несколько инструментов, которые вы можете использовать:

XN Resource Explorer

Хакер ресурсов

Ресурс-Grabber

из кода с помощью DelphiDabbler .

или с помощью TResourceStream класса.Этот вопрос объясняет, как его использовать: Как извлечь ресурс в файл во время выполнения?

...