我按照示例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]
........
請張貼最小但完整的源代碼,所以我們可以利用我們的編譯器來幫助查找問題。全=我們可以編譯並運行它。最小=只有足夠的代碼來重現您的問題 – 2011-02-23 11:57:37