A Процесс подсистемы Windows (т. Е. Один с WinMain
) не будет иметь STDOUT, STDERR или STDIN, если только он не был специально задан при запуске. Предполагается, что, поскольку это программа Windows, вы взаимодействуете с ней через Windows.
т.е. GetStdHandle не возвращает дескриптор STDOUT, потому что у вас нет STDOUT.
Чтобы получить его, запустите его так:
winprog.exe > output.txt 2>&1
Если запустить его таким образом, он будет иметь как STDOUT, так и STDERR, которые оба войдут в указанный файл.
Как уже указывали другие пользователи, AttachConsole выдаст вам консоль (ближайший эквивалент Unix / Linux - TTY), но не даст STDOUT. Если вы хотите один, вам придется установить его как отдельный шаг. Если вы хотите, чтобы это была консоль, вы можете иметь это тоже.
С другой стороны, Консольная подсистема Программа (одна с main
) по умолчанию будет иметь STDIN, STDOUT и STDERR, все настроенные на Консоль. Вы можете отсоединить процесс от консоли и закрыть их, если хотите.