我对Windows API感到困惑。我尝试使用PeekNamedPipe
查看匿名管道中是否还有字节。此函数失败,但GetLastError()
未返回错误。
我的代码的相关部分是
if( !PeekNamedPipe( handle, NULL, 0, NULL, &numBytesAvailable, NULL ) )
throw PeekNamedPipeException( "GetLastError() returned " + std::to_string( GetLastError() ) );
这会抛出错误,生成以下消息:
terminate called after throwing an instance of 'PeekNamedPipeException'
what(): GetLastError() returned 0
但如果PeekNamedPipe
失败,GetLastError
不应返回0(== ERROR_SUCCESS
),对吧?
感谢您的帮助!
答案 0 :(得分:3)
这可能是因为在PeekNamedPipe
和您对GetLastError
的号召之间调用了更多系统功能(幕后)。
将GetLastError
中的值存储在临时变量中,并在构造字符串时使用它。