To raczej niezwykłe, gdyż u mnie to działa tak jak podałem. Poza tym w pomocy jest podane:
|
STARTF_USESHOWWINDOW - The wShowWindow member is valid. |
|
STARTF_USESTDHANDLES - The hStdInput, hStdOutput, and hStdError members are valid. |
Wynika więc z tego, że wartość STARTF_USESTDHANDLES nie ma nic wspólnego z elementem wShowWindow, gdyż go nie dotyczy. Poza tym mozemy również przeczytać:
|
wShowWindow If dwFlags specifies STARTF_USESHOWWINDOW, this member can be any of the SW_ constants defined in Winuser.h. Otherwise, this member is ignored. For GUI processes, wShowWindow specifies the default value the first time ShowWindow is called. The nCmdShow parameter of ShowWindow is ignored. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdShow parameter of ShowWindow is set to SW_SHOWDEFAULT. |
po chwili...Już wiem gdzie tkwi błąd. Powinno być tak jak podałem ja, a nie Ty, czyli wartość
STARTF_USESHOWWINDOW, tylko, że w kodzie polymorphism mamy podaną wartość
STARTF_USESTDHANDLES, stąd ten błąd, poprawiony kod powinien wyglądać tak:
- Kod: Zaznacz cały
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof ( SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
STARTUPINFO si;
ZeroMemory( &si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.wShowWindow = SW_HIDE; si.hStdInput = CreateFile("D:\\iconv\\test.txt",
GENERIC_READ,
FILE_SHARE_READ,
&sa,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
si.hStdOutput = CreateFile("D:\\iconv\\out.txt",
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
&sa,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
PROCESS_INFORMATION ProcessInfo;
if(CreateProcess(NULL, "D:\\iconv\\iconv.exe -f ISO-8859-2 -t UTF-8",
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
}
CloseHandle(si.hStdInput);
CloseHandle(si.hStdOutput);
Ta druga wartość podana przez ciebie czyli
STARTF_USESTDHANDLES jest potrzebna dla elementów
hStdInput i
hStdOutput, gdyż wypełniasz zarówno element
wShowWindow jak też elementy
hStdInput i
hStdOutput.
Drobne przeoczenie, ale teraz wszystko się zgadza i nie ma w tym niczego niezwykłego.