私は、シェルを介して任意のプログラムを呼び出してその出力をログする必要があるWin32ユーティリティー関数を作成しています。私たちは、パイプに子プロセスからの標準出力をリダイレクトすることによって、この操作を行います。Win32:stdoutハンドルがcharまたはwcharストリームかどうかを確認してください
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0);
// Redirect the first process stdout to our write pipe
// so that we can read its output from the read pipe.
startUpInfo.dwFlags = STARTF_USESTDHANDLES;
startUpInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startUpInfo.hStdOutput = hWritePipe;
startUpInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
CreateProcessA(NULL, szCmdLine, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startUpInfo[i], &procInfo);
この方法呼ばれるプログラムの多種多様な、その多くは当社の管理下にないがあります。現在、多くのプログラムの出力が最初の文字の後に切り捨てられているように見えます。通常は、WCHAR文字列が誤ってCHARとして使用されているという確かな記号です。
子プロセスがCHARまたはWCHARとしてstdoutパイプに書き込んでいるかどうかをどのように確認できますか?