Ошибка PeekNamedPipe, но GetLastError возвращает 0

Я смущен 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

Решение

Это, вероятно, потому что больше системных функций вызывается (за кулисами) между PeekNamedPipe и ваш звонок GetLastError,

Сохранить значение из GetLastError во временной переменной, и используйте это при построении строки.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]