Ürünümüzü, kabuk aracılığıyla rasgele bir program çağırması ve çıkışını günlüğe kaydetmesi gereken bir win32 yardımcı programı işlevi yazıyorum. Biz bir boru içine çocuğun süreçten stdout'u yönlendirerek yapabilirsiniz:Win32: Stdout tanıtıcısının char mı yoksa wchar akışının mı olduğunu belirleyin.
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);
kontrolümüz altında olmayan birçoğu bu şekilde adlandırılabilir programların, geniş bir çeşitlilik vardır. Şu anda, birçok programın çıktısının ilk karakterden sonra kırpıldığı gibi bir problem görüyoruz --- genellikle bir WCHAR dizesinin yanlışlıkla CHAR olarak kullanıldığı kesin işareti.
Çocuk işleminin stdout borusuna CHAR veya WCHAR olarak yazıp yazmadığını nasıl anlarım?