gpt4 book ai didi

c++ - 构建调试输出字符串

转载 作者:行者123 更新时间:2023-11-28 07:01:32 25 4
gpt4 key购买 nike

除此之外还有其他连接 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: %1\n"), TEXT("Hello"));

这会输出 Just a test: Hello在调试窗口中。如果您要指定宽度和其他东西,它会变得有点怪异,但查看文档应该可以解决问题。

关于c++ - 构建调试输出字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22398564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com