PeekNamedPipe失败,但GetLastError返回0

时间:2013-10-17 07:41:12

标签: c++ winapi pipe getlasterror

我对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),对吧?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

这可能是因为在PeekNamedPipe和您对GetLastError的号召之间调用了更多系统功能(幕后)。

GetLastError中的值存储在临时变量中,并在构造字符串时使用它。