Какую функцию я должен использовать для вывода текста в окно "Выход" в Visual Studio?
Я пробовал printf()
, но он не отображается.
Какую функцию я должен использовать для вывода текста в окно "Выход" в Visual Studio?
Я пробовал printf()
, но он не отображается.
Функция 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);
}
Если это для вывода отладки, то 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() ); \
}
Используйте 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 );
Общее решение:
#include <iostream>
//...
std::cerr << "Text" << std::endl;
Использовать 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("[...]"));
}