Board logo

标题: [求助]如何在一个程序中加入另一个程序? [打印本页]

作者: 无条件为你    时间: 2006-3-24 23:15     标题: [求助]如何在一个程序中加入另一个程序?

    我用C++写程序的时候,想把另一个EXE文件加进来,在执行本程序的时候,那个EXE程序会被释放在指定的目录中。如何实现?
我知道用RAR压缩软件很容易实现,或者可以用文件捆绑器把我写的程序和那个EXE捆在一起,也就是EXE合并就可以了。但我不想用这些方法,我想在写自己的程序中直接加入另一个EXE,如何实现?用插入资源文件的形式把EXE插入,行不行?如果可以,如何做呢?
作者: x86    时间: 2006-3-25 00:11     标题: [求助]如何在一个程序中加入另一个程序?

不知道,嘿嘿.
不过偶也很想试一试在一个进程中释放一个文件.
可能需要涉及到文件压缩,否则一个可执行文件全部缓冲起来,那就太大了.
最好是做得通用以及模块化一点.可以压缩,也可以释放.灵活一点的样子.

作者: 无条件为你    时间: 2006-3-25 15:51     标题: [求助]如何在一个程序中加入另一个程序?

  在网上搜过到了一篇《如何从资源中释放文件》的文章,不是很懂,烦请高人解释一下,全文如下:


------------------------------------
          如何从资源中释放文件
有些时候,我们的程序需要一些资源,通常都是放在和应用程序相同的文件夹下。
但是,这样做是比较不合适的。因为在移动的过程中很容易造成文件的丢失,所以,将自己的资源文件放在Resource中是比较合适的。但能够导入的资源类型比较少,有很多文件不支持,所以我们需要写些代码,从资源中释放这些文件,然后再供我们调用。当我们觉得这些文件比较重要的时候,还可以在这些文件使用完毕以后将它们删除。具体的方法见下面。
    举个例子,从资源中释放一个GIF文件,然后调用。
void CMyApp::LoadPictuer()
{
    CString szPic = "Welcome.gif";
    CFileFind find;
    if( !find.FindFile(szPic) )
        g_MakeResourceFromExe(szPic,"jig",IDR_JIG1);
    find.Close();
}
g_MakeResourceFromExe就是从资源中释放文件的函数,代码如下:
bool g_MakeResourceFromExe(CString szExPathName,CString szResName,int nResID)
{
    HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);
    if(hSrc == NULL) return false;
   
    HGLOBAL hGlobal = LoadResource(NULL,hSrc);
    if(hGlobal == NULL) return false;
        
    LPVOID lp = LockResource(hGlobal);
    DWORD dwSize = SizeofResource(NULL,hSrc);

    CFile file;
    if(file.Open(szExPathName,C文件::modeCreate|C文件::modeWrite))
    {
        file.Write(lp,dwSize);
        file.Close();
    }
    FreeResource(hGlobal);
    return true;
}
g_MakeResourceFromExe函数可以直接拿来使用。但是释放出来的文件如何使用,那就要看自己怎样修改了。
-------------------------------

运行时  HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);出错,如果将“szResName”参数改为0,便没有错误了,但执行无反应,并不能释放文件。
作者: 无条件为你    时间: 2006-4-1 22:00     标题: [求助]如何在一个程序中加入另一个程序?

通过几天的知识收集,此问题我已经解决,感谢大家关注。




欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2