Я пытаюсь перенаправить трассировки на выходной консоли в Windows Visual 2012, Linker/Subsystem = Windows (/ SUBSYSTEM: WINDOWS), используя классический Функция RedirectIOToConsole.Выполнение std :: endl перед AllocConsole не вызывает отображения std :: cout
Выполнение std :: endl перед тем, как AllocConsole вызывает проблемы для отображения следов.
Ниже мой тест:
#include <windows.h>
#include <stdio.h>
#include <iostream>
void RedirectIOToConsole()
{
FILE *conin, *conout;
AllocConsole();
freopen_s(&conin, "conin$", "r", stdin);
freopen_s(&conout, "conout$", "w", stdout);
freopen_s(&conout, "conout$", "w", stderr);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
// std::cout << "My Trace 1"; // Uncomment this line for Test 1
// std::cout << "My Trace 1" << std::endl; // Uncomment this line for Test 2
RedirectIOToConsole();
printf("redirected console\n");
std::cout << "My Trace 2" << std::endl;
ch = getchar();
return 0;
}
- Выполнить это, как это - выход в окне консоли:
перенаправлены консоль
Мой след 2 -> OK
- Раскоментируйте линия для теста 1 - выход в окне консоли:
перенаправлены консоли
Мой след 2 -> OK
- Раскоментируйте линия для испытания 2 - выход в окне консоли:
переадресованная консоль -> NOK
'std :: cout' буферизуется,' std :: endl; 'очищает буфер. Надеюсь, что это поможет, потому что я вообще не понял проблему/вопрос. –
Первое, что вам нужно сделать, это проверить наличие ошибок в функции, которую вы вызываете. И если они указывают на ошибку, вы можете проверить, какая ошибка (например, «GetLastError» для «AllocConsole» или возвращаемое значение для 'freopen_s'). –