如何将多个文件捆绑成一个可执行文件
http://tech.ddvip.com 2006年06月30日 社区交流
本文详细介绍如何将多个文件捆绑成一个可执行文件
3、判断何时捆绑程序,何时又分解最终合成程序。
由于本程序是将自身捆绑程序作为文件头,要绑定文件附加其后方式生成最终合成文件的。所以,只要知道自身捆绑程序的文件长度,再在初始化对话框涵数OnInitDialog()加以判断及可知道是否是最终合成文件(要不要释放内部绑定文件)。本例程用VC6.0采用静态连接方式生成的Release版,文件大小为184K。
故判断是捆绑还是释放文件的代码具体实现如下:
BOOL CBindFileDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application''s main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//在此初始化渐变色进度条
m_Progress.SetRange32(1,500);
m_Progress.SetBkColor(RGB(160,180,220));
m_Progress.ShowPercent(true);
m_Progress.SetPos(500);
//初始置各文件名变量为空
strFirstFilePath = ""; //要绑定第一个文件名
strSecondFilePath = ""; //要绑定第二个文件名
strFinalFilePath = ""; //最终合成文件名
//初始化变量
prog1_length = 0; //文件长度
his_name = ""; //绑定文件名
buf = NULL; //缓冲区置空
//获取自身文件名到my_mane变量中
::GetModuleFileName(0, my_name, sizeof(my_name));
struct _stat ST;
_stat(my_name, &ST); //获取自身文件信息(长度)
//在此加入捆绑器程序的最终大小,来判断是绑定文件还是分解执行文件
//当发现自身文件大小大于原大小184K时,为释放内部合成文件
if(ST.st_size > 184*1024)
{
Unbind(); //分离文件并运行
exit(0); //直接退出程序,不显示捆绑程序画面
}
return TRUE; // return TRUE unless you set the focus to a control
}
其中具体实现细节问题,可在下载实例代码后,仔细查看既可(内有详细注释)。
责编:豆豆技术应用