Как получить текст в окне вывода Visual Studio с помощью STL IO? - PullRequest
3 голосов
/ 12 ноября 2009

Я всегда думал, что окно вывода для приложения MSVC ++, работающего в отладчике, было сопоставлено с одним из стандартных потоков вывода. Но когда я запускаю этот код в приложении Windows MFC, ничего не видно:

std::cerr << "cerr"<<std::endl;
std::cout << "cout"<<std::endl;
std::clog << "clog"<<std::endl;

Это Windows или VC ++? Как функции / макросы, такие как TRACE и OutputDebugString, записывают в это окно, и я не могу сделать это без их использования?

Ответы [ 4 ]

4 голосов
/ 12 ноября 2009

Нет потока стандартного стиля, сопоставленного с окном вывода Visual Studio. Функция, которая выполняет это, является OutputDebugString ().

Самое близкое, что вы можете получить к чему-то подобному, - это создать свой собственный класс-обертку, который ведет себя как ostream, и ниже вызывает OutputDebugStream.

2 голосов
/ 12 ноября 2009
0 голосов
/ 17 ноября 2015

Это дружественный к потоку подход, который я нашел в сети:

class debug_stream : public std::ostringstream
{
public:
    template<typename T>
    friend debug_stream& operator<<(debug_stream& os, T&& s);
};

template<typename T>
debug_stream& operator<<(debug_stream& os, T&& s)
{
    (ostringstream&amp;)os << s;
    PrintToDebug(os.str());
    os.str("");
    return os;
}

class dbgview_buffer : public std::stringbuf
{
public:
    ~dbgview_buffer()
    {
        sync(); // can be avoided
    }

    int sync()
    {
        OutputDebugString(str().c_str());
        str("");
        return 0;
    }
};

Используйте это так:

dbgview_buffer buf;
ostream dbgview(&buf);
dbgview << "test" << endl;
0 голосов
/ 15 мая 2015

Вы можете использовать RTP Macro :

std:string myString = "SOMETHING";
_RPT1(_CRT_WARN, "%s\n", myString.c_str());

или OutputDebugString

std:string myString = "SOMETHING";
OutputDebugString(savedStatementText.c_str());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...