Как записать в окно вывода в Visual Studio?

Какую функцию я должен использовать для вывода текста в окно "Выход" в Visual Studio?

Я пробовал printf(), но он не отображается.

Ответ 1

Функция OutputDebugString сделает это.

пример кода

    void CClass::Output(const char* szFormat, ...)
{
    char szBuff[1024];
    va_list arg;
    va_start(arg, szFormat);
    _vsnprintf(szBuff, sizeof(szBuff), szFormat, arg);
    va_end(arg);

    OutputDebugString(szBuff);
}

Ответ 2

Если это для вывода отладки, то OutputDebugString - это то, что вы хотите. Полезный макрос:

#define DBOUT( s )            \
{                             \
   std::ostringstream os_;    \
   os_ << s;                   \
   OutputDebugString( os_.str().c_str() );  \
}

Это позволяет вам говорить такие вещи, как:

DBOUT( "The value of x is " << x );

Вы можете расширить это с помощью макросов __LINE__ и __FILE__, чтобы получить еще больше информации.

Для тех, кто находится в Windows и широко используется:

#include <Windows.h>
#include <iostream>
#include <sstream>

 #define DBOUT( s )            \
{                             \
   std::wostringstream os_;    \
   os_ << s;                   \
   OutputDebugStringW( os_.str().c_str() );  \
}

Ответ 3

Используйте OutputDebugString или TRACE macro (MFC), который позволяет вам форматировать printf -style:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );    
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

Ответ 4

Общее решение:

#include <iostream>

//...
std::cerr << "Text" << std::endl;

Ответ 5

Использовать OutputDebugString вместо afxDump.

Пример:

#define _TRACE_MAXLEN 500

#if _MSC_VER >= 1900
#define _PRINT_DEBUG_STRING(text) OutputDebugString(text)
#else // _MSC_VER >= 1900
#define _PRINT_DEBUG_STRING(text) afxDump << text
#endif // _MSC_VER >= 1900

void MyTrace(LPCTSTR sFormat, ...)
{
    TCHAR text[_TRACE_MAXLEN + 1];
    memset(text, 0, _TRACE_MAXLEN + 1);
    va_list args;
    va_start(args, sFormat);
    int n = _vsntprintf(text, _TRACE_MAXLEN, sFormat, args);
    va_end(args);
    _PRINT_DEBUG_STRING(text);
    if(n <= 0)
        _PRINT_DEBUG_STRING(_T("[...]"));
}