c++ - PeekNamedPipe 失败,但 GetLastError 返回 0

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

感谢您的帮助!

最佳答案

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

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

关于c++ - PeekNamedPipe 失败,但 GetLastError 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420883/

相关文章:

c++ - 如何修复文件路径大小写?

c++ - PathGetArgs/PathRemoveArgs 与 CommandLineToArgvW - 有区别吗?

c - 在子进程和父进程之间发送数据时如何使用两个管道?

c++ - 外部库 : Get cursor image

python - Ctypes 捕获异常

c++ - 将具有 vector 成员的数据结构写入二进制文件

c - llseek 在调用 zcat all.tgz 时返回 ESPIPE | ./cycletee

c++ - 如何在带有 GDB GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb session ?

c++ - 在mfc中获取进程所有者名称

windows - 如何使用标准输入管道作为 gcc 的源输入?