Build DebugOutputString
Build DebugOutputString
本文关键字:DebugOutputString Build 更新时间:2023-10-16
除了这个,还有其他连接DebugOutputString的可能性吗?
std::ostringstream outs;
outs.precision(6);
outs << mMainWndCaption << _T("FPS: ") << fps;
DebugOutputString(_T(outs.str().c_str()));
也许更容易输出像在printf?
我正在寻找类似DebugOutputString(_T("FPS: %i", fps));
的东西,例如
ostringstream
方法的一个问题是,如果您正在构建unicode应用程序,可能会遇到有趣的结果。我猜你在这里没有使用unicode,如:
DebugOutputString(_T(outs.str().c_str()));
将不会编译-它将预处理为:
DebugOutputString(Louts.str().c_str());
即使要正确地完成它,您也需要根据您的项目设置有条件地使用basic_ostringstream<char>
或basic_ostringstream<wchar_t>
。但是我离题了。
看一下FormatMessage API调用。使用它有一些注意事项,例如系统是否为您分配内存,如果是,您需要删除缓冲区,等等。它有一些稍微不同的格式选项。但是它会做你想做的事情。
在你的情况下,你可以写一个方法,将你的参数直接传递给DebugOutputString
-事实上,API页面提供了一个例子,返回一个格式化的缓冲区…你只需要记得在使用后将其LocalFree
。
这里是一个简短的版本:
void OutputFormattedDebug(LPTSTR pMsg, ...) {
LPTSTR pBuffer = NULL;
va_list args = NULL;
va_start(args, pMsg);
FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER, pMsg, 0, 0, (LPTSTR)&pBuffer, 0, &args);
va_end(args);
if (pBuffer) {
OutputDebugString(pBuffer);
LocalFree(pBuffer);
}
}
...
OutputFormattedDebug(TEXT("Just a test: %1n"), TEXT("Hello"));
在调试窗口中输出Just a test: Hello
。如果你指定宽度和其他东西,它会变得有点奇怪,但看看文档应该会帮你理清头绪。
就在昨天,我把它放到了我自己的一个项目中。
也许它会帮助你:
void DebugWrite(LPCTSTR format, ...)
{
CString text;
va_list args;
va_start(args, format);
text.FormatV(format, args);
va_end(args);
OutputDebugString((LPCTSTR)text);
}
你可以这样调用它:
DebugWrite(_T("FPS: %i"), fps);
相关文章:
- 没有找到相关文章