【问题标题】:Extract the resource file提取资源文件
【发布时间】:2014-01-30 18:42:31
【问题描述】:

我已使用 UpdateResource 函数将资源文件附加到现有的 exe 文件。

如何提取它?

编辑

这是我将资源文件附加到现有 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. 

【问题讨论】:

    标签: delphi resources extract


    【解决方案1】:

    使用LoadLibraryEx 传递LOAD_LIBRARY_AS_IMAGE_ RESOURCE 加载模块,然后使用TResourceStream.SaveToFile 保存资源。

    我当然假设您不想从正在运行的可执行文件中提取资源。如果是这种情况,您可以直接联系TResourceStream.SaveToFile

    【讨论】:

    • 我也用过TResourceStream.SaveToFile。但不起作用,将显示此错误:Resource [MyResName] not found.
    • 您是从可执行文件本身中调用它的吗?在这种情况下,您的代码只包含一个错误,而 that 就是您应该发布的代码。
    • 很可能您的 HMODULE、资源名称或资源类型有误。
    • 我提取资源的代码:ResStream := TResourceStream.Create(HInstance, 'MyNewResource', RT_RCDATA);
    • 好。如果资源在正在运行的可执行文件中,则只需使用 HInstance。在这种情况下不需要 LoadLibrary。
    【解决方案2】:

    您可以使用多种工具:

    XN Resource Explorer

    Resource Hacker

    Resource-Grabber

    使用DelphiDabbler 来自代码。

    或使用TResourceStream 类。这个问题告诉你如何使用它:How can I extract a resource into a file at runtime?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 2013-11-20
      • 2016-05-30
      相关资源
      最近更新 更多