我想在我的win32程序A里WinExec一个win32 console程序B(自己写的),把一些A里的
信息output到B上去,请问各位高人,我应该怎么做?

解决方案 »

  1.   

    这是进程间数据交换的问题。可以建立内存映射文件,通过它交换数据。console程序以查询方式查询映射文件的内容,决定是否进行显示。或者在console中创建接收消息的线程,响应win32程序A发送的需要output数据的消息,从映射内存中获取需要输出的数据,在控制台输出。
      

  2.   

    能不能说说怎样创建接收消息的线程,我不大懂?thanks~
      

  3.   

    DWORD dwShareMode=FILE_SHARE_READ|FILE_SHARE_WRITE;
    SECURITY_ATTRIBUTES sa={sizeof(sa),NULL,true};
    STARTUPINFO si;
             PROCESS_INFORMATION pi;
    HANDLE  hconsel = NULL;
          // 创建一个中间文件
    hconsel = ::CreateFile("d:\\lll.txt",
                   GENERIC_READ|GENERIC_WRITE,
                   dwShareMode,
                   &sa, 
                   OPEN_ALWAYS,
                          ILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,
                 NULL); 
    if (hconsel == INVALID_HANDLE_VALUE) 
      { 
            AfxMessageBox("Could not create  file.");  
    return;     // process error 
      }    //////////////////////////////////////////////////////// 
        ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
        si.cb =  sizeof(si);
    si.dwFlags = STARTF_USESTDHANDLES;//这个标志最重要,表明下面的句柄有效
    si.hStdOutput = hconsel;   //得到程序输出流(文件)句柄   /////////////////////////////////////////////////////////
    if(!(CreateProcess("E:\\任务之一\\dsaqua091\\dsaqua\\DSaqua09.exe",
                                 TEXT("DSaqua09"),
     NULL,
     NULL,
     true,
     CREATE_NO_WINDOW,NULL,         "E:\\任务之一\\dsaqua091\\dsaqua",
    &si,
    &pi)))
    {
    MessageBox("Cannot open this file!");
    CloseHandle(hconsel);
    return;

    }
       /////////////////////////////////////////////////////////////
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    m_handfile = hconsel;
         最后得到文件句柄,你可以输出到你的控制台窗口中
        上面的代码是我做过的一个程序的小片断
      

  4.   

    谢谢 lilylovey(楚云飞) 你的程序,我想问问原理是不是win32程序A通过将信息不断写入一个
    文本文件,而程序B则不断监视该文本文件是否改变,是的话就把新添加进去的信息输出到
    console窗口?
      

  5.   

    自己写得就简单了。
    把你要output的东西当命令行参数就行了。
    用不着memory mapped file什么的高深技巧。