パイプからの読み取りのために例文hereに従っていますが、ReadFileは失敗し、GetLastError()はパイプが壊れていることを示しています。
私は以前にプログラムでパイプを作成して使用しましたが、すべてのハンドルを閉じ、確実に新しいパイプ用に全く新しい変数を使用しました。
これはなぜ機能しないのでしょうか?win32(WinAPI)のパイプ破損
HANDLE g_hChildStd_OUT_Rd2 = NULL;
HANDLE g_hChildStd_OUT_Wr2 = NULL;
SECURITY_ATTRIBUTES saAttr2;
STARTUPINFO si2;
PROCESS_INFORMATION pi2;
ZeroMemory(&si2, sizeof(si2));
si2.cb = sizeof(si2);
ZeroMemory(&pi2, sizeof(pi2));
//create pipe
saAttr2.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr2.bInheritHandle = TRUE;
saAttr2.lpSecurityDescriptor = NULL;
CreatePipe(&g_hChildStd_OUT_Rd2, &g_hChildStd_OUT_Wr2, &saAttr2, 0);
//create child process
bSuccess = FALSE;
memset(szCmdLine, 0, MAX_PATH);
sprintf(szCmdLine, "ffmpeg.exe -i output.mp3");
ZeroMemory(&pi2, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si2, sizeof(STARTUPINFO));
si2.cb = sizeof(STARTUPINFO);
si2.hStdOutput = g_hChildStd_OUT_Wr2;
si2.dwFlags |= STARTF_USESTDHANDLES;
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si2, &pi2);
//read from pipe
CloseHandle(g_hChildStd_OUT_Wr2);
memset(chBuf, 0, BUFSIZE);
for (;;)
{
bSuccess = ReadFile(g_hChildStd_OUT_Rd2, chBuf, BUFSIZE, &dwRead, NULL);
[bSuccess is 0 and GetLastError() returns error 109]
........
ので、我々は問題を見つけるために私たちのコンパイラを使用することができ、最小限のが、完全なソースコードを投稿してください。 full =コンパイルして実行できます。最小=あなたの問題を再現するのに十分なコードしかありません –