如何将多个文件捆绑成一个可执行文件

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
}

  其中具体实现细节问题,可在下载实例代码后,仔细查看既可(内有详细注释)。

责编:豆豆技术应用

正在加载评论...