怎么将其他文件做成exe文件?(200分)

  • 主题发起人 主题发起人 梁坚
  • 开始时间 开始时间
to Sachow:
当然,上面的程序只是基础,但加以扩充。你就可以实现往Project1.exe中加入任意复杂的
数据,方法如下(其实也是压缩程序的原理之一):
首先你得定义两个记录 :
TFileRec = record
name : shortstring;
start : longint;
Size:Longint;
end;
TArchiveRec = record
FileCount:longint;
end;
TFileRec 用于记录每个文件的信息。(以上两个记录的具体内容可自定,但必须能确定
记录的大小,也即不能在记录中有string类型等不能确定大小的字段),
TArchiveRec 用于记录插入文件的总个数。
往Project1.exe中添加资源时,可依照以上的方法进行,即把资源的数据一个一个地往
Project1.exe的尾部添加.但在加入一个资源之前,你必须先得到当前的位置(可通过
Target.Size或先移到Target的尾部,再通过Position属性得到),然后写入该文件对应
的TFileRec记录的Start字段,用于记录该资源在Project1.exe中的起始位置,在加入全部
资源以后,你再设置TArchiveRec记录的FileCount字段,然后按加入资源的顺序往Project1.exe
尾部写入对应的TFileRec,最后再写入TArchiveRec记录。从而完成了添加资源操作。
在Project1.exe中读资源时,要先在Project1.exe的尾部读出TArchiveRec记录以得到资源的
个数,然后再根据资源的个数依次读出TFileRec记录,从而得到每个文件的Start等信息,
这样就可以正确地读出每个资源的数据了。之所以可以这样读,是因为TArchiveRec和TFileRec记录
的大小是可以确定的(通过Sizeof函数),所以你可以正确定位。
其实这种程序的难点就是如何定位,只要实现了正确定位,那一切就OK了。
 
放置任意的文件到Delphi的EXE文件里面

通常在Delphi的应用程序中,我们会调用到很多的资源,例如图片,动画(AVI),声音,甚至于别的执行文件。当然,把这些资源分布到不同的目录不失为一个好办法,但是有没有可能把这些资源编译成标准的windows资源从而链接到一个执行文件里面呢?

我们可以自己做一个RC文件,例如 sample.rc ,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;


 
请继续或结束
 
这样做做出来的都太大了(接近200K),不符和原意吧,不如做一个不用Form的主程序,
才2xK而已,只是不能用 流 格式了,可以用经典的 assignfile 啊
另外,用添加资源的方法,辅助程序不是要调用dcc32 ?麻烦,何况,小的主程序又
不能用 流 格式读取资源,不如原样追加更好一些(因为我做过:-p
 
没那么费事吧,用一个RichEdit,将Text内容输入进去,一编译,就行了。
用image在设计期将.bmp调入,编译,运行,就可以不要原文件了,岂不简单。
 
多人接受答案了。
 
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=403887
我看了这贴后,用里面的代码写了:
http://go4.163.com/~lovejingtao/exe2to1.exe
http://go4.163.com/~lovejingtao/exelock.exe
建议问问题前先查找一下。
 

Similar threads

后退
顶部