windows - Jumbled output i CMD.EXE med en manuelt tildelt konsol

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bliver frustreret. Jeg har en Windows GUI-applikation, der manuelt åbner en konsol. Opkald AllocConsole og omdirigerer stdin, stdout og stderr fungerer alt sammen fejlfrit. Jeg kan skrive alle input og output, og det fungerer godt. Problemet er, at når jeg kalder \_wsystem for at køre en CMD-kommando, er udgangen skrald. Tegnene er jumbled. CMD er ikke integreret med konsollen.


Jeg omdirigerer output til konsollen som følger:


consoleHandleOut = GetStdHandle(STD\_OUTPUT\_HANDLE); 
if (consoleHandleOut != INVALID\_HANDLE\_VALUE) { 
    //freopen("CONOUT$", "w", stdout); 
    freopen\_s(&newStream, "CONOUT$", "w", stdout); 
    setvbuf(stdout, NULL, \_IONBF, 0); 
    SetStdHandle(STD\_OUTPUT\_HANDLE, 
                 (HANDLE)\_get\_osfhandle(\_fileno(newStream))); 
} else { 
    return FALSE; 
} 


Jeg gør dette til hvert håndtag.

Bedste reference


Skift åben tilstand fra 'w' til 'r +'. For fuldstændig kompatibilitet med konsol-API'en skal konsolfiler åbnes med read-write adgang, hvilket er, hvordan de åbnes som standard, når en proces allokerer en konsol. For eksempel registrerer C-runtime et konsolhåndtag til isatty]] ved at kalde GetConsoleMode, som kræver et håndtag med læstadgang. Dette vil mislykkes, hvis 'CONOUT $' åbnes med kun skriveadgang.