一开始没有集成到exe单文件里的时候我用的笨方法CopyFile(pchar('SYSlanhai.dll'), pchar('SYSManage.exe'), False); //复制文件
这样,有多个文件的时候很不方便,集成到exe里简单、稳定、速度快。
过程:
-
创建一个文本文件,然后将资源文件按照如下格式填写:a b demo.DLL (名字随便起中间有空格,demo.DLL这个跟资源名称要对应)然后将文本文件保存为'文件名.rc'格式(不会?自己百度吧.我这里保存的是demo.rc)。
-
将资源文件demo.DLL与保存的这个demo.rc一起保存到Brcc32.EXE所在目录。(我的是:C:\Program Files (x86)\Embarcadero\Studio\20.0\bin)
-
点开始-运行,输入cd/返回到根目录,然后cd 进入C:\Program Files (x86)\Embarcadero\Studio\20.0\bin 这个路径。运行:“Brcc32.exe demo.rc(回车)”会在其目录生成一个上图标识5的。demo.res的文件。
-
将这个demo.res文件复制到你delphi 工程所在的目录。然后引用资源方法如下:{$R demo.RES}
附:源码
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); //复制文件
if ExtractRes('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.
/```