要是只是想调用exe怎么实现?
要是还想调用类与函数怎么实现?工程必须改为dll嘛?

解决方案 »

  1.   

    要是只是想调用exe怎么实现?
    CreateProcess要是还想调用类与函数怎么实现?工程必须改为dll嘛?
    如果预计到这个类或函数会多次用到,则把他们抽出来,做成dll
      

  2.   

    调用其它程序                                        何志丹
    WinExec
    原型:
    UINT WinExec(
      LPCSTR lpCmdLine,  // address of command line
      UINT uCmdShow      // window style for new application
    );
    用于十六位操作系统及兼容系统.
    例如:
    WinExec("notepad.exe f:\\调用程序.txt",SW_SHOW);
    WinExec("notepad.exe ",SW_SHOW);
    不同的参数用空格分开,故路径中不能有空格,而大部分程序默认是安装在"...\Program Files\...",如word,这极大的限制了WinExec的应用范围.
    以上可不带路径:
    1,程序所在目录.
    2,当前路径.
    3,系统目录,可以用GetSystemDirectory得到.
    4,Windows 目录. 可以用TheGetWindowsDirectory得到.  
    5,在环境变量中设置的目录.ShellExecute
    原型:
    HINSTANCE ShellExecute(
        HWND hwnd,                   //父窗口句柄
        LPCTSTR lpOperation,         //操作,"open","print","explore"
        LPCTSTR lpFile,              //文件名,前面可加路径
        LPCTSTR lpParameters,        //参数
        LPCTSTR lpDirectory,         //默认文件夹
        INT nShowCmd                 //显示方式
    );打开一个应用程序
    ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );

    ShellExecute(this->m_hWnd,"open","notepad.exe","c:\MyLog.log","",SW_SHOW );打开一个同系统程序相关连的文档
    ShellExecute(this->m_hWnd,"open","c:\abc.txt","","",SW_SHOW );激活相关程序,发送EMAIL
    ShellExecute(this->m_hWnd,"open","mailto:[email protected]","","", SW_SHOW );用系统打印机打印文档
    ShellExecute(this->m_hWnd,"print","c:\abc.txt","","", SW_HIDE);lpParameters的用法示例:
    一,建立一个可以接受参数的程序call.exe,添加如下代码:
    BOOL CCallApp::InitInstance()
    {
     int n = __argc;
     for(int i = 1 ; i < n ; i++)
      AfxMessageBox(__targv[i]);
           //__targv[0]存储的是程序的文件名
    ...
    }
    二,Alt + F7的进行Project setting, Debug -> program argurments ->"1 2 3 4 5".
    如果有多个参数,用空格分开.
    三,运行.
    四,执行ShellExecute(NULL,NULL,"f:\\call.exe","1 2 3 4 5",NULL,SW_SHOW);BOOL CreateProcess(
      LPCTSTR lpApplicationName,
                             
      LPTSTR lpCommandLine,  
      LPSECURITY_ATTRIBUTES lpProcessAttributes,  
      LPSECURITY_ATTRIBUTES lpThreadAttributes,   
      BOOL bInheritHandles,  
      DWORD dwCreationFlags, 
      LPVOID lpEnvironment,  
      LPCTSTR lpCurrentDirectory,   
      LPSTARTUPINFO lpStartupInfo,  
      LPPROCESS_INFORMATION lpProcessInformation  
    );
    STARTUPINFO   startupInfo;
    memset(&startupInfo,0,sizeof(STARTUPINFO));
    startupInfo.cb = sizeof(STARTUPINFO);示例:
    //程序最启动时最大化 
    startupInfo.dwFlags |= STARTF_USESHOWWINDOW;
    startupInfo.wShowWindow = SW_SHOWMAXIMIZED;
     
    //运行....exe
     PROCESS_INFORMATION ProcessInfo;
      BOOL bCreate = ::CreateProcess
            (
            "f:\\call.exe",// 1 2 3 4",
      NULL,
      NULL,
            NULL,
            FALSE,
            0,
            NULL,
            NULL,
            &startupInfo,
            &ProcessInfo); //等到call.exe执行完毕
    WaitForSingleObject(ProcessInfo.hProcess,1000000);
    MessageBox("调用程序结束!");
      

  3.   

    要是还想调用类与函数怎么实现?工程必须改为dll嘛?
    --
    不必改成dll
      

  4.   

    CreateProcess怎么用?
    能不能给各简单的例子?
    3x~
      

  5.   

    he_zhidan(何志丹:www.dzlishi.net,www.vcshare.net) ( ) 信誉:100  要是还想调用类与函数怎么实现?工程必须改为dll嘛?
    --
    不必改成dll那怎么引用呢?
      

  6.   

    system("*.exe");执行,调用*.exe;
    或者用LoadLibrary(LPCTSTR lpFileName);调用。lpFileName为a .dll 或 .exe file
      

  7.   

    要是还想调用类与函数怎么实现
    --
    如果是少量函数,可以考虑用接口否则还是DLL好.
      

  8.   

    CreateProcess怎么用?
    能不能给各简单的例子?
    3x~
    he_zhidan(何志丹:www.dzlishi.net,www.vcshare.net) 不是已经给你贴了吗呵呵,自己试试呀