加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 提取资源文件

发布时间:2020-12-15 09:37:59 所属栏目:大数据 来源:网络整理
导读:我已使用UpdateResource函数将资源文件附加到现有的exe文件. 我该如何提取它? 编辑 这是我将资源文件附加到现有exe文件的代码: Uses Classes,Windows,SysUtils,Dialogs;Type TBuffer = Array[0..0] of Byte; PBuffer = ^TBuffer;Var FS : TFileStream; Res
我已使用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.

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读