对了上面的源码中,你注意的两个类是
class CRedirect
{
定义很长,就省了。
}
class CRedir : public CRedirect
{
protected:
void OnChildWrite(UINT OutputID, LPCSTR lpszOutput);
protected:
virtual void OnChildStarted(LPCSTR lpszCmdLine);
virtual void OnChildStdOutWrite(LPCSTR lpszBuffer);
virtual void OnChildStdErrWrite(LPCSTR lpszBuffer);
virtual void OnChildTerminate();
};
下面的函数是输出函数
void CRedir::OnChildWrite(UINT OutputID, LPCSTR lpszOutput)
{
CFrameWnd *pFrame = (CFrameWnd*)AfxGetMainWnd();
if (pFrame != NULL)
{
if (theApp.m_bOemToAnsi)
{
int len = strlen(lpszOutput);
char *lpszBuffer = new CHAR[len+1];
strcpy(lpszBuffer, lpszOutput);
::OemToChar(lpszBuffer, lpszBuffer);
CopyData(pFrame->m_hWnd, OutputID, NULL, lpszBuffer, strlen(lpszBuffer)+1);
delete [] lpszBuffer;
}
else
CopyData(pFrame->m_hWnd, STDIO_WRITE_TEXT, NULL, lpszOutput, strlen(lpszOutput)+1);
}
}
(你把两个红色的地方改一下)