Как я могу создать консоль отладки для GUI приложения с помощью чистых вызовов WIN32 API
Я играю с созданием отладочной консоли для приложения WIN32 GUI, и я пытаюсь сделать это по-другому, и клянусь жизнью, я не могу заставить это работать, это такая простая вещь, но она сводит меня с ума. Я знаю, что об этом уже спрашивали миллион раз, и общий способ, которым я пользовался, таков:
AllocConsole(); freopen("CON", "r", stdin); freopen("CON", "w", stdout); freopen("CON", "w", stderr);
или также
OutputDebugString(TEXT("blah, blah blah");
Я думаю, что слишком много свободного времени/скуки/любопытства или какой-то странной воли делать вещи самым трудным способом, я хотел попробовать сделать это по-другому с помощью просто чистых вызовов WIN32 с AllocConsole, CreateFile, SetStdHandle. Независимо от того, сколько гуглить или искать через MSDN, я не могу заставить это работать правильно. Все функции возвращаются успешно, и консоль открывается на экране, но нет ввода/вывода.
Что я уже пробовал:
AllocConsole(); HANDLE hConsoleSTDIN = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); SetStdHandle(STD_INPUT_HANDLE, hConsoleSTDIN); HANDLE hConsoleSTDOUT = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); SetStdHandle(STD_OUTPUT_HANDLE, hConsoleSTDOUT);
если я printf() или std::cout, то ничего не отображается.
Любая помощь была бы очень кстати.
Спасибо
Мэтт
11917640 Member
Вы можете изменить параметр /SUBSYSTEM из Windows в консоль (если это вызывает ошибку компоновщика, измените также параметр /ENTRY). Или просто используйте OutputDebugString + DebugView https://docs.microsoft.com/en-us/sysinternals/downloads/debugview