delphi将文件资源打包到exe中
<p>一开始没有集成到exe单文件里的时候我用的笨方法CopyFile(pchar('SYSlanhai.dll'), pchar('SYSManage.exe'), False); //复制文件<br>这样,有多个文件的时候很不方便,集成到exe里简单、稳定、速度快。</p>
<h3 id="过程">过程:</h3>
<ol>
<li>
<p>创建一个文本文件,然后将资源文件按照如下格式填写:a b demo.DLL (名字随便起中间有空格,demo.DLL这个跟资源名称要对应)然后将文本文件保存为'文件名.rc'格式(不会?自己百度吧.我这里保存的是demo.rc)。</p>
</li>
<li>
<p>将资源文件demo.DLL与保存的这个demo.rc一起保存到Brcc32.EXE所在目录。(我的是:C:\Program Files (x86)\Embarcadero\Studio\20.0\bin)<br>
<img src="https://img2020.cnblogs.com/blog/1410887/202007/1410887-20200726142633893-1576290632.png"></p>
</li>
<li>
<p>点开始-运行,输入cd/返回到根目录,然后cd 进入C:\Program Files (x86)\Embarcadero\Studio\20.0\bin 这个路径。运行:“Brcc32.exedemo.rc(回车)”会在其目录生成一个上图标识5的。demo.res的文件。<br>
<img src="https://img2020.cnblogs.com/blog/1410887/202007/1410887-20200726142112370-135565622.png"></p>
</li>
<li>
<p>将这个demo.res文件复制到你delphi 工程所在的目录。然后引用资源方法如下:{$R demo.RES}<br>
<img src="https://img2020.cnblogs.com/blog/1410887/202007/1410887-20200726142251240-1046225408.png"></p>
</li>
</ol>
<p>附:源码</p>
<pre><code class="language-/">unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{$R demo.RES}
function ExtractRes(ResName,ResType, ResNewName: string): boolean; //释放资源文件
var
Res: TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result := true;
finally
Res.Free;
end;
except
Result := false;
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
//DeleteFile('SYSManage.exe');
// CopyFile(pchar('SYSlanhai.dll'), pchar('SYSManage.exe'), False); //复制文件
ifExtractRes('a','b','SYSManage.exe') then
ShowMessage('注册文件成功');
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
winexec('SYSManage.exe', 0); //运行外部exe
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
close;
end;
end.
/```
</code></pre><br><br>
来源:https://www.cnblogs.com/lanhai2020/p/13380341.html
頁:
[1]