2010-09-21 1 views
2

У меня есть приложение C# windows, которое вызывает управляемую dll C++, которая, в свою очередь, вызывает родную dll C++. Кажется, что некоторые проблемы с производительностью возникают в коде на языке C++, поэтому я делаю некоторые простые профилирования. Я хотел бы сбросить результаты профилирования, чтобы окно вывода Visual Studio подбирало его. Я думал, что printf выполнит трюк, но ничего не появится ни в окне вывода, ни в окне Immediate. Я также пробовал fprintf, но это тоже не работает.Перенаправить stdout в окно вывода Visual Studio из родной C++ dll

ответ

7

Попробуйте OutputDebugString

OutputDebugString является довольно простой, поэтому я, как правило, добавить следующие мои проекты, чтобы сделать его работать как Printf (убедившись, что во избежание наката размер буфера):

#if (_VERBOSE) 
void DebugPrintf (LPTSTR lpFormat, ...) 
{ 
    TCHAR szBuf[1024]; 
    va_list marker; 

    va_start(marker, lpFormat); 
    _vstprintf(szBuf, lpFormat, marker); 
    OutputDebugString(szBuf); 
    va_end(marker); 
} 
#endif 
+0

+1 : Добавлено преимущество использования OutputDebugString(); вы можете просматривать сообщения в DbgView, что означает, что вы можете просматривать сообщения, даже если ваше приложение работает в режиме деблокирования, а не под отладчиком. –

+0

Это делает трюк, спасибо! – fre0n