MFC加载exe资源,程序调用exe功能

1、工程B为基于MFC对话框程序,先插入已经存EXE(或DLL)文件到VC资源文件中,如下图:

 

    A、切换到资源视图,在上面单机右键:

 MFC加载exe资源,程序调用exe功能_第1张图片

 

    B、单击"Import...",找到刚刚工程A编译生成的MsgBox.exe文件:

 MFC加载exe资源,程序调用exe功能_第2张图片

 

    C、设置导入的资源类型名,这个名称将是该函数的第三个参数,我们取资源类型名为EXE:

 MFC加载exe资源,程序调用exe功能_第3张图片

 

    D、此时,资源视图中多了一个类型为:EXE,资源ID为:IDR_EXE1,如下图:

 MFC加载exe资源,程序调用exe功能_第4张图片

 

 

2.输入代码:

 HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE1), _T("EXE")); 
 DWORD dwSize = SizeofResource(NULL, hRes);  
 HGLOBAL hGlobal = LoadResource(NULL, hRes);  
 LPVOID lp = LockResource(hGlobal);  

按F7 Built你的工程之后,FileView视图就会出现MsgBox.exe

MFC加载exe资源,程序调用exe功能_第5张图片

这样就把外部的exe程序引进入到MFC工程了,剩下的,你就可以使用调用EXE的方法使用了。

eg:system("msgbox.exe");

之后按CTRL+F5,你生成的exe程序运行它就包含了msgbox.exe的功能,无需把msgbox.exe程序放到硬盘中,通过程序去调用它了,它是可以单独存在的。

完整的代码如下:

void CMFCRunExeResourceDlg::OnOK() 
{
 // TODO: Add extra validation here 
try
    {
        HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE2), _T("EXE"));
        if(NULL == hRes) 
            return ; 
        
        DWORD dwSize = SizeofResource(NULL, hRes); 
        if(0 == dwSize) 
            return ; 
        
        HGLOBAL hGlobal = LoadResource(NULL, hRes); 
        if(NULL == hGlobal) 
            return ; 
        
        LPVOID lp = LockResource(hGlobal); 
        if(NULL == lp) 
            return ; 

        CFile file;
      // TCHAR szApp[MAX_PATH] = {_T("D:\\wentaoli\\VCProgramm\\ping1.exe")};
  TCHAR szApp[MAX_PATH] ="ping1.exe";
        file.Open(szApp, CFile::modeCreate | CFile::modeWrite);
        file.Write(lp, dwSize);
        file.Close();

        FreeResource (hGlobal);

        if(PathFileExists(szApp))
        {
            STARTUPINFO si = {sizeof(si)};
            PROCESS_INFORMATION pi = {0};
            if(CreateProcess(NULL, szApp , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
            {
                CloseHandle(pi.hThread);
                CloseHandle(pi.hProcess);
            }
        }
    }
    catch (CException* e)
    {
        e->ReportError();
        e->Delete();
    }

// CDialog::OnOK();
}
//////////////////////////////////////////////////////////////////////
//   1.Click the right mouse button in Dialog,select import
//   2.select xxx.exe program,Resource type input "exe",
//   3.Build program,switch to FileView window,will see xxx.exe in the tree structure.
//////////////////////////////////////////////////////////////////////
void CMFCRunExeResourceDlg::OnButton1() 
{
 // TODO: Add your control notification handler code here
 HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE1), _T("EXE")); 
 DWORD dwSize = SizeofResource(NULL, hRes);  
 HGLOBAL hGlobal = LoadResource(NULL, hRes);  
 LPVOID lp = LockResource(hGlobal);  
 CFile file;
 // TCHAR szApp[MAX_PATH] = {_T("D:\\wentaoli\\VCProgramm\\ping1.exe")};
 TCHAR szApp[MAX_PATH] ="Winsock_getIP.exe";
 file.Open(szApp, CFile::modeCreate | CFile::modeWrite);
 file.Write(lp, dwSize);
 file.Close(); 
 FreeResource (hGlobal); 
 STARTUPINFO si = {sizeof(si)};
 PROCESS_INFORMATION pi = {0};
 if(CreateProcess(NULL, szApp , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
 {
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
 }
}



 

 

 

你可能感兴趣的:(mfc)