只有高手才能回答的问题!解决即刻结贴给分200!

guoyin 2004-10-17 09:03:28
本人想了解下面软件如何实现,给出原理100分,有代码全部送上200分
http://soft.ttdown.com/SoftView/SoftView_19972.html
MP3toExe
...全文
415 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2005-01-17
  • 打赏
  • 举报
回复
思路1的实现应该比较简单:
mp3player.exe + 数据长度(length of mp3) + mp3.mp3
qrlvls 2005-01-17
  • 打赏
  • 举报
回复
思路1:生成执行文件模板,使用Copy +的方式将MP3追加到EXE尾部,EXE读取执行文件末的数据文件并播放
思路2:编码播放MP3的源码,通过VC自带的编译器编译生成
tabris17 2005-01-16
  • 打赏
  • 举报
回复
>本软件是一款将MP3转换成EXE的工具,这样,不用播放器即可播放MP3了,这样,减少了内存的占用及CPU的负担。

瞎扯蛋,难道它生成的那个EXE就不占内存了
guoyin 2005-01-16
  • 打赏
  • 举报
回复
近期将结贴,欢迎讨论
漂流的代码 2005-01-16
  • 打赏
  • 举报
回复
写一个简单的mp3播放程序,用mci就可以了,然后把自己打开,读取mp3文件数据。这个程序的结构大致是
----------------------
MP3Player(2进制代码)
----------------------
MP3音频数据
----------------------
MP3数据长度
-----------------------
伪算法表示如下
FILE *GetMp3File()
{
GetModulePath; //取得自己的名字
FILE *f=fopen(selfName,"rb");
fseek(f,-sizeof(int),SEEK_END);
int length;
fread(&length,1,sizeof(int),f);
fseek(f,-length-sizeof(int),SEEK_END);
return f;//可以像普通文件那样读数据
}

生成时exe时,只要将mp3附加到exe后,然后写入mp3文件长度即可,例如
fNew=fopen(NewName,"wb");
fExe=fopen(ExeName,"rb");
fMp3=fopen(Mp3Name,"rb");
fread(ExeData,1,ExeLength,fExe);
fwrite(ExeData,1,ExeLength,fNew);
fread(Mp3Data,1,Mp3Length,fMp3);
fwrite(Mp3,Data,1,Mp3Length,fNew);
fwrite(&Mp3Length,1,sizeof(Mp3Length),fNew);
如果用file函数不行,就换其他函数如CreateFile等
oyljerry 2005-01-15
  • 打赏
  • 举报
回复
把mp3作为资源
kugou123 2004-10-22
  • 打赏
  • 举报
回复
还有一种方法,直接把MP3文件追加到简单播放程序的尾部,播放的时候,先释放,在播放,和以上原理相似。
cnwww 2004-10-22
  • 打赏
  • 举报
回复
引用:
"本软件是一款将MP3转换成EXE的工具,这样,不用播放器即可播放MP3了,这样,减少了内存的占用及CPU的负担。"

有吹的成分,至少会增加磁盘空间占用量.
pepsi1980 2004-10-21
  • 打赏
  • 举报
回复
网上有这样得代码得。可惜我找不到了:(
kugou123 2004-10-21
  • 打赏
  • 举报
回复
主要用到的API函数:
HRSRC FindResource( HMODULE hModule,
LPCTSTR lpName,
LPCTSTR lpType
);
//查找资源

DWORD SizeofResource( HMODULE hModule,
HRSRC hResInfo
);
//取得资源大小

HGLOBAL LoadResource( HMODULE hModule,
HRSRC hResInfo
);
//装载资源

LPVOID LockResource( HGLOBAL hResData
);

//锁定资源
示例:

HRSRC hResource;
HGLOBAL hResourceData;
DWORD dwWritten,dwSize;
HANDLE hFile;
LPBYTE pMemory;
hResource=FindResource(NULL,MAKEINTRESOURCE(IDR_MP3),"mp3"); //这里是你添加进来的MP3资源名称

if(hResource==NULL)
AfxMessageBox("没有找到资源!");
dwSize=SizeofResource(NULL,hResource);//取得资源大小
hResourceData=LoadResource(NULL,hResource);//装载资源

if(hResourceData==NULL)
AfxMessageBox("装载资源失败!");

pMemory=(LPBYTE)GlobalAlloc(GPTR,dwSize);
if(pMemory==NULL)
AfxMessageBox("分配内存失败!");

CopyMemory((LPVOID)pMemory,(LPCVOID)LockResource(hResourceData),dwSize);

hFile=CreateFile("c:\\windows\\temp\\temp.mp3",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if(hFile!=NULL)WriteFile(hFile,(LPCVOID)pMemory,dwSize,&dwWritten,NULL);
else AfxMessageBox("创建文件失败!");


CloseHandle(hFile);
GlobalFree((HGLOBAL)pMemory);

这样,你已经把MP3从资源中释放了出来,再用你的程序播放即可。

如果楼主还有不明白,你可以参考10月的CSDN开发高手,李马兄的文章《浅析木马服务端的生成技术》
kugou123 2004-10-21
  • 打赏
  • 举报
回复
写一个简单的播放MP3的程序,把MP3作为资源导入,编译,然后程序运行时,先查找资源,然后把资源写成一个临时文件,开始播放,播放完毕,删除刚才的临时文件。
w100 2004-10-19
  • 打赏
  • 举报
回复
mark
guoyin 2004-10-19
  • 打赏
  • 举报
回复
自己顶一下
huaboy408 2004-10-18
  • 打赏
  • 举报
回复
把mp3压缩然后和微型播放器组合在一起吧
DentistryDoctor 2004-10-18
  • 打赏
  • 举报
回复
将mp3作为exe的资源即可。
roger_ding 2004-10-18
  • 打赏
  • 举报
回复
把mp3解码的代码写在前面,然后decode后面的mp3
Mr-Chen 2004-10-18
  • 打赏
  • 举报
回复
主要是文件合成,将文件,解压缩码和播放器合成一个文件
snaill 2004-10-17
  • 打赏
  • 举报
回复
哦,就是自解压zip一样,在一个mp3文件前面加一个播放程序而已
smallcrocodile 2004-10-17
  • 打赏
  • 举报
回复
点解
snaill 2004-10-17
  • 打赏
  • 举报
回复
mark

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧