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

标签 delphi resources

我有一个资源文件(.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',0,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:\Users\Dexter\Documents\RAD Studio\Projects\Debug\Win32\Data.txt','C:\Users\Dexter\Documents\RAD Studio\Projects\Debug\Win32\project86.exe');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

关于delphi - 如何将资源文件附加到现有的可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054300/

相关文章:

windows - 获取 unicode 符号的别名

delphi - 我应该如何在 Delphi 7 析构函数中释放对象数组?

.net - 我真的需要在每个Principal上调用Dispose()吗?

wpf - 如何在 xaml 中复制 WPF 资源?

c# - 将 using 语句与 WinForms 一起使用……好的做法?

delphi - 在哪里可以找到 MIDAS 库源代码?

用于TCP连接的Delphi透明代理

delphi - TWebrowser 加载大字体页面

c++ - 高效安全的资源管理

WPF 资源的代码隐藏?