Как просмотреть вывод printf в приложении Win32 на Visual Studio 2010?

Самое простое и, возможно, наиболее эффективное решение проблемы, как указано:

.input_dataobjects |=
  map( if .datatype == "somedatatype1"
       then .name = "sonemewname1"
       else . end )
19
задан Peter Mortensen 10 December 2013 в 15:23
поделиться

4 ответа

Поскольку MinGW используют "_A_SYSTEM" вместо этого "_O_TEXT". Так портировал Quintin Willison , ответ следующие:

#include <io.h>
void SetStdOutToNewConsole()
{
  // allocate a console for this app
  AllocConsole();
  // redirect unbuffered STDOUT to the console
  HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
  int fileDescriptor = _open_osfhandle((intptr_t)consoleHandle, _A_SYSTEM);
  FILE *fp = _fdopen( fileDescriptor, "w" );
  *stdout = *fp;
  setvbuf( stdout, NULL, _IONBF, 0 );
  // give the console window a nicer title
  SetConsoleTitle(L"Debug Output");
  // give the console window a bigger buffer size
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  if ( GetConsoleScreenBufferInfo(consoleHandle, &csbi) )
  {
    COORD bufferSize;
    bufferSize.X = csbi.dwSize.X;
    bufferSize.Y = 9999;
    SetConsoleScreenBufferSize(consoleHandle, bufferSize);
  }
}
0
ответ дан 30 November 2019 в 01:58
поделиться

Вот страница, которая расскажет вам, как это сделать, включая пример кода.

Вы должны создать консольное окно с помощью AllocConsole(), затем связать стандартные файловые дескрипторы C с дескрипторами HANDLE нового консольного окна.

2
ответ дан 30 November 2019 в 01:58
поделиться

Я знаю, что делал это раньше, используя функцию AllocConsole , но Я также помню, что это было немного сложнее, чем я ожидал.

Быстрый поиск в Google на AllocConsole дает, по-видимому, статью из журнала разработчиков Windows , которая кажется актуальной. Оттуда следующее кажется похожим на то, что я припоминаю, хотя и расплывчато.

void SetStdOutToNewConsole()
{
    int hConHandle;
    long lStdHandle;
    FILE *fp;

    // Allocate a console for this app
    AllocConsole();

    // Redirect unbuffered STDOUT to the console
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stdout = *fp;

    setvbuf(stdout, NULL, _IONBF, 0);
}
14
ответ дан 30 November 2019 в 01:58
поделиться

Вам понадобится окно консоли. Безусловно, самый простой способ получить его - это изменить параметр компоновщика: Project + Properties, Linker, System, SubSystem = Console. Добавьте метод main ():

int main() {
    return _tWinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
}
14
ответ дан 30 November 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: