Welcome

首页 / 软件开发 / C++ / EXE到SWF文件的转换代码

EXE到SWF文件的转换代码2008-01-05//-------------------------------------------------------------

/* Exe 格式 到 SWF 各式转换程序

支持Flash6格式

源码很容易看懂!

有问题来信live_on@sohu.com 狭路相逢

这个函数是我的Live Flash 播放器的一部分

*/

#include <vcl.h>
#pragma hdrstop
#include "exef.h"
//-------------------------------------------------------------
#pragma package(smart_init)
AnsiString exe2swf(AnsiString FileName)  //函数名
{
int iFileHandle;
unsigned long iFileLength;
unsigned long iBytesRead;
AnsiString dFileName;
unsigned char *pszBuffer;
//unsigned char *Buffer;
iFileHandle = FileOpen(FileName.c_str(), fmOpenRead);//打开文件
iFileLength = FileSeek(iFileHandle,0,2);//确定长度
 
FileSeek(iFileHandle,0,0);
pszBuffer = new char[iFileLength+1]; //读入源文件
if (pszBuffer==NULL)
{
return(NULL);
}
iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
FileClose(iFileHandle);//关闭
//dFileName=
dFileName=FileName.UpperCase ().SubString (1,FileName.Length () - 4)+".SWF" ;//生成目标文件名
// if (FileExists(dFileName)) //确定是否存在
// return (NULL);
//printf("%d ",iBytesRead);
int i=0;
int ii=0;
for (i=0 ;i<iFileLength-2;i++)  //匹配识别字符 FWS
{
//pszBuffer++;  
if ((pszBuffer[i-2]==0)&&(pszBuffer[i-1]==0)&&(pszBuffer[i]=="F")&&(pszBuffer[i+1]=="W")&&(pszBuffer[i+2]=="S"))
{
ii=i;
}
}
i=ii;
pszBuffer=pszBuffer+i;
iFileHandle = FileCreate(dFileName.c_str() );
if (i!=376831&&i!=286719&&i!=811008) //是否为 4。5。6版本
{
if(!Application->MessageBoxA("文件格式异常!强制播放?","警告",IDOK))
return (NULL);
}
FileWrite(iFileHandle, pszBuffer,iFileLength-i );
FileClose(iFileHandle);
delete [] pszBuffer;
return(dFileName);
}