请教一个问题,如何将数据嵌入可执行文件中
有一组数据,数据量大,以文本的形式存放在硬盘上
每次调用exe时,首先从硬盘上将数据读入
如果将exe分发给别人,同时也要将数据文件一同给别人
看来资源文件,但是不知道怎么将数据嵌入到exe中
数据格式是:
文件1中:
1 2 3
4 5 6
.。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。
文件2中:
1,2,3
4,5,6,7,8
.........................
................................
在执行exe是,首先将上述两个文件中的数据读入几个数组中去
[解决办法]
给你一篇文章供你参考:
1:编辑一个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
----------------------------------------
自己做一个一个资源文件的描述文本RC文件,例如 sample.rc ,“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,
例如:
MEN BITMAP c:\bitmap\men.bitmap
ARJ EXEFILE c:\arj.exe
MOV AVI c:\mov.avi
然后用BRCC32把这个RC文件编译成sample.res(真正的资源文件)。
在Delphi的工程文件中使用 $R 编译指令让Delphi包括资源到EXE文件里面。
{$R sample.res}
这样我们就可以在这个单一的执行文件中调用资源了。举例如下:
EXEFILE:
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;
AVI:
procedure LoadAVI;
begin
{Avi1是一个TAnimate类}
Avi1.ResName:='AVI';
Avi1.Active:=True;
end;
[解决办法]
先用文件流读入EXE文件 然后扩充SIZE SIZE=EXE.SIZE + 文件.SIZE 然后设置流偏移 开始写文件
WINDOWS执行EXE的时候 执行到EXE标志结束位置就OK了 所以不会影响你的程序的。
其实有些病毒也是这样做的 不过是加载到EXE其他位置罢了;