请问各位如何才能在生成的EXE文件中嵌入数据文件。。。(50分)

  • 主题发起人 主题发起人 littlefat
  • 开始时间 开始时间
L

littlefat

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样,要将一段AVI文件套上一个播放的文件头,姑且称作AVI2EXE吧,目的是不让别人轻易得到单独的AVI文件。播放器的的问题可以很好地解决,但是如何才能将AVI文件嵌入到EXE中去呢?

客户要求生成的EXE文件在播放时,不能将AVI解压出来成临时文件再播放,否则就失去了保护的意义。。。

还有,如果能将AVI文件嵌入到EXE中去,播放部分应该如何改进才能使原来只能播放外部文件的播放器能播放嵌入的AVI文件?

AVI文件大小不等,小的可能不到一兆,大的可能有几十兆。。。
50分。。。
 
把媒体文件追加到程序的后面,同时加密,
播放时,直接从后面读取数据,
解密后进行播放
 
要如何才能做到呢?麻烦详细些。。。
 
做成RES嘛,就可以一起编译到exe
------------------------------------------------------------------
不能将AVI解压出来成临时文件再播放,否则就失去了保护的意义。。。
------------------------------------------------------------------
这要看你的Player控件是否支持流,Delphi的MediaPlay就不行
 
在下不才,不知道如何才能做成RES,请兄台示下。。。

Delphi中有没有什么容器可以放置大的文件。。。我想尽量简单。。。
 
建一个文本文件,文件名是AVI.rc,文件有一行:
Resource AVIDATA avi.avi //假设你的avi文件是avi.avi
将这个AVI.rc与你的avi.avi文件放在一个目录下,在Dos提示符下用 brcc32.exe编译:
brcc32 avi
就会生成一个AVI.RES文件,将它Copy到你的工程目录下
在你的窗体单元文件,加上
{$R AVI.RES}
如果编译通过,哪个AVI 就作为资源写进了exe文件

怎样读出来?
创建一个TResourceStream的流:
AVIStream := TResourceStream.Create(Instance,'avi', 'AVIDATA');
然后,如果你的MediaPlayer支持从流播放,就可以
Player.PlayFromStream(AVIStream);

 
接受答案了.
 
jackchin兄,分已经送出,但是按照你的做法我编译能通过,但是运行时发生错误:
我用的是Delphi7
我新生成一个Res.Rc文本文件,内容只有一行:Resource MYHEAD HEAD.BIN
使用Brcc32编译:Brcc32 Res.RC,编译通过,生成了Res.RES的资源文件。

新起一个Form,主要代码如下:
implementation

{$R *.dfm}

{$R res.RES}

procedure TForm1.Button1Click(Sender: TObject);
Var ResStream:TStream;
DstFileStream:TStream;
begin

ResStream:=TResourceStream.Create(Application.Handle,'MyHead','myhead');
//ResStream:=TResourceStream.Create(Application.Handle,'AVIDATA','AVI');
DstFileStream:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'DstFile',fmCreate);
DstFileStream.Write(ResStream,Sizeof(ResStream));

ResStream.Free;
DstFileStream.Free;

end;



运行时,当点击Button1的时候,运行出错,说是资源MyHead未找到。。。

但是我用Resourcehacker工具去查看生成的exe文件时,文件中已经有名字叫做MyHead的资源。。。郁闷ing。。。

还烦请兄台示下!谢谢!
 
搞定了。

原来仁兄的举例让我有所误解。。。
 
后退
顶部