Last Updated 2005/09/01
Programming Tips Visual C++  索 引 
標準入出力
2005/09/01

標準出力の受け取りは以下のようにする.

PROCESS_INFORMATION    _procinfo;
STARTUPINFO            _startup;
SECURITY_ATTRIBUTES    saProcess;
HANDLE                 hFile;

memset(&_startup, 0, sizeof(STARTUPINFO)); // 構造体の初期化
_startup.cb = sizeof(STARTUPINFO);
_startup.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
_startup.wShowWindow = SW_SHOWMINNOACTIVE | SW_HIDE; // 最小サイズで起動させる

// リダイレクト内容格納ファイルのハンドル取得及び STARTUPINFO にセット
memset( &saProcess, 0, sizeof(saProcess));
saProcess.nLength = sizeof( saProcess );
saProcess.bInheritHandle = TRUE;

hFile = CreateFile( "XXXXX.LOG",   // リダイレクト内容を格納するファイルの名前
                    GENERIC_READ | GENERIC_WRITE,
                    FILE_SHARE_WRITE | FILE_SHARE_READ,
                    &saProcess,
                    CREATE_ALWAYS,
                    FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH,
                    NULL );
if( hFile == (HANDLE)(HFILE_ERROR)) {
    // エラー処理

}else{
    // CreateFile成功
    _startup.hStdOutput = hFile;
}

// DOS プログラムの起動
BOOL bRet = CreateProcess( NULL,
                           (LPSTR)"XXX.EXE /A /P",  // コマンドライン
                           NULL,
                           NULL,
                           TRUE,
                           0,
                           NULL,
                           NULL,
                           &_startup,
                           &_procinfo );
if( bRet != TRUE ) {
    // エラー処理
}else{
    // DOS プログラムの終了を待つ
    bRet = WaitForSingleObject(_procinfo.hProcess, INFINITE);
    if( bRet == WAIT_FAILED ) {
       // プロセス異常
    }
}

// リダイレクト格納ファイルのクローズ
CloseHandle(hFile);


参照
前後のTips
標準入出力

DSS ProgrammingTipsCGI Ver2.02