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

delphi – 如何将资源文件附加到现有的可执行文件?

发布时间:2020-12-15 10:11:39 所属栏目:大数据 来源:网络整理
导读:我有一个资源文件(.RES),我想将其添加到现有的可执行文件中,而无需重新编译和使用IDE!可能吗? 编辑 以及如何提取资源文件? 解决方法 如果您的问题是,如果您可以将资源添加到现有的exe文件,是的,这是可能的.为此,您必须使用 UpdateResource 函数,该函数可
我有一个资源文件(.RES),我想将其添加到现有的可执行文件中,而无需重新编译和使用IDE!可能吗?

编辑

以及如何提取资源文件?

解决方法

如果您的问题是,如果您可以将资源添加到现有的exe文件,是的,这是可能的.为此,您必须使用 UpdateResource函数,该函数可以在可移植可执行(PE)文件中添加,删除或替换资源.

更新

这里有一个示例代码

{$APPTYPE CONSOLE}

uses
  Classes,Windows,SysUtils;

procedure UpdateExeResource(Const Source,Dest:string);
var
  Stream     : TFileStream;
  hDestRes   : THANDLE;
  lpData     : Pointer;
  cbData     : DWORD;
begin
  Stream := TFileStream.Create(Source,fmOpenRead or fmShareDenyNone);
  try
    Stream.Seek(0,soFromBeginning);
    cbData:=Stream.Size;
    if cbData>0 then
    begin
      GetMem(lpData,cbData);
      try
        Stream.Read(lpData^,cbData);
        hDestRes:= BeginUpdateResource(PChar(Dest),False);
        if hDestRes <> 0 then
          if UpdateResource(hDestRes,RT_RCDATA,'DATA',lpData,cbData) then
          begin
            if not EndUpdateResource(hDestRes,FALSE) then RaiseLastOSError
          end
          else
          RaiseLastOSError
        else
        RaiseLastOSError;
      finally
        FreeMem(lpData);
      end;
    end;
  finally
    Stream.Free;
  end;
end;

begin
  try
    UpdateExeResource('C:UsersDexterDocumentsRAD StudioProjectsDebugWin32Data.txt','C:UsersDexterDocumentsRAD StudioProjectsDebugWin32project86.exe');
  except
    on E: Exception do
      Writeln(E.ClassName,': ',E.Message);
  end;
end.

(编辑:李大同)

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

    推荐文章
      热点阅读