把EXE可执行文件等作为资源包含在Delphi编译文件中

摘自我自己过去写的一段心得。

1.编辑资源文件 *.RC

Wave: 资源文件是声音文件;

RCDATA: 二进制数据

AVI: AVI动画;

ICON: 图标文件;

BITMAP: 位图文件;

CURSOR: 光标文件;

比如:

MyWav WAVE "FileName.Wav"

2.使用Brcc32转化为*.RES文件

3.在工程中引用RES文件

比如:{$R MyRes.RES}

4.运行时读入

通过TResourceStream ,比如TResourceStream.Create(HInstance, ResName, RT_RCDATA);

API:LoadBitmap,LoadIcon等

组件:Image1.Picture.Bitmap.LoadFromResourceName

/////////////////////////////////////////////////////////

把EXE可执行文件等作为资源包含在Delphi编译文件中2010/01/18 8:29 P.M.感觉还是挺有用的,转载保存了~~~

建立文本文件 TEST.RC 撰写下面的一行

AEXE EXEFILE c:\test.exe

存盘

copy test.rc 到你DELPHI目录里的 bin 目录

执行 brcc32 test.rc

得到 test.res

copy test.res 到你的工程目录

记得在工程文件里加上 {$R test.res}

提取RES中的TEST.EXE的函数

procedure extractexeres(restype, resname, resnewname:string);

var

res:tresourcestream;

begin

res:=tresourcestream.create(hinstance,resname,pchar(resyype));

res.savetofile(resnewname);

res.free;

end;

建立文本文件 myjpg.RC 撰写下面的一行

Hash JPGFILE c:\myjpg.jpg

存盘

copy myjpg.rc 到你DELPHI目录里的 bin 目录

执行 brcc32 myjpg.rc

得到 myjpg.res

copy myjpg.res 到你的工程目录

记得在工程文件里加上 {$R myjpg.res}

提取RES中的MYJPG.jpg的函数

procedure extractexeres(resname, restype, resnewname:string);

var

res:Tresourcestream;

begin

res:=Tresourcestream.create(hinstance,resname,pchar(restype));

res.savetofile(resnewname);

res.free;

end;

//这样你就可以调用resnewname这个 jpg文件了。

调用的时候如下:

Extractexeres('Hash','JPGFILE','f:\myjpg.jpg');

换一种说法:

1、生成一个rc文件,文件格式如下:

rwww exefile "test.exe" //rwww是资源名称

//exefile是资源类型

//text.exe是资源

资源类型列表:

Wave: 资源文件是声音文件;

RCDATA: 一般二进制文件;

AVI: AVI动画;

ICON: 图标文件;

BITMAP: 位图文件;

CURSOR: 光标文件;

exefile: exe文件

FILE: 一般文件

2、将delphi安装目录下bin中的brcc32.exe文件拷出,用brcc32.exe执行

生成的rc文件,在dos窗口下 运行:brcc32 test.rc 生成正式的

后缀为.res的次源文件

3、在delphi中加入编译指令{$R test.res}用以编译。但注意,以上的test.exe文件

一定要在当前路径下存在。

4、调用:

var

t : TResourceStream;

begin

try

t := TResourceStream.Create(HInstance,'rwww','exefile'); //其中HInstance为一个句柄常量;rwww为资源名;exefile为资源类型

t.SaveToFile('c:\2.exe'); //保存文件成2.exe

finally

t.free;

end;

end;

///////////////////////////////////////////////////////////

编辑一个 resource.rc 文件 ,里面类似如下 :

hookdll RC_Dll YourHookDllFileName.Dll

2: 然后用 Brcc32.exe 编译 :

brcc32 resource.rc

结果生成 resource.res 文件

3: 修改窗体 Pas 或者 Dpr 文件 ,添加下面的代码 :

{$R *.res}

{$R resource.res}

4: 关键的代码 :

在窗体初始化或者工程的开头部分添加代码 :

var

res:tresourcestream;

....

res:=tresourcestream.create(instance,'hookdll','RC_Dll');

res.SaveToFile('YourHookDllFileName.Dll');

res.Free;

5: 你的程序退出的时候 :

DeleteFile('YourHookDllFile.Dll');

6:End