J'écris une fonction d'utilitaire win32 pour notre produit qui doit appeler un programme arbitraire via le shell et enregistrer sa sortie. Nous faisons cela en redirigeant la sortie standard du processus enfant dans un tuyau:Win32: Détermine si le handle stdout est char ou wchar stream
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);
Il existe une grande variété de programmes qui peuvent être appelés ainsi, dont beaucoup ne sont pas sous notre contrôle. Actuellement, nous voyons un problème où la sortie de nombreux programmes semble être tronquée après le premier caractère --- généralement un signe certain qu'une chaîne WCHAR est utilisée par erreur comme CHAR.
Comment puis-je savoir si le processus fils écrit dans son canal stdout en tant que CHAR ou WCHAR?