【发布时间】:2018-09-19 18:33:10
【问题描述】:
if ( hFileConnection == INVALID_HANDLE_VALUE ) {
std::stringstream s;
s << __func__ << " had GetLastError = " << GetLastError() << endl;
OutputDebugStringA( s.str().c_str() );
OutputDebugStringA( "\n" );
}
我喜欢
我的 Visual Studio“单元测试”在调试窗口中显示“Init had GetLastError = 2”,因此代码确实有效。
【问题讨论】:
-
宏是合理的罕见情况
-
你能有另一个版本的
OutputDebugStringA接受std::string吗? -
@Colin 我怀疑这是可能的,因为
OutputDebugString是一个 WIN32 API 函数并且可能是extern "C",它可以防止过载。 -
请注意,您需要注意
GetLastError和评估顺序。在执行任何其他操作之前将其存储在变量中是最安全的。 -
您还可以创建一个具有一组合适的
operator<<()重载的类,所有这些都根据需要调用OutputDebugStringA()。然后,给定该类的一个实例,您在示例中需要做的就是if (hFileConnection == INVALID_HANDLE_VALUE ) {instance << __func__ << " had GetLastError = " << GetLastError() << endl << "\n";}。如果/根据需要,让该类的成员函数管理stringstream对象,而不是将其强制到调用代码上。可以选择将类设为单例。
标签: c++