#c #windows #gdi
#c #Windows #gdi
Вопрос:
Я использую CreateDIBSection()
для создания HBITMAP из буфера, но иногда — без регулярного появления — я получаю из него нулевой указатель. Я не могу понять, что может заставить функцию возвращать нулевой указатель, потому что, как я уже говорил, он не является регулярным. Иногда это происходит после отображения 10 кадров, иногда после 2 кадров. Может кто-нибудь объяснить мне, каковы возможные причины неожиданного сбоя?
Комментарии:
1. Что
GetLastError()
возвращается при сбое?2. Для @Alan GetLastError не задан
CreateDIBSection
. По крайней мере, не в соответствии с документами.3. @David Документация несколько неясна — в ней говорится, что функция возвращает NULL при сбое, а также что она может «возвращать» ERROR_INVALID_PARAMETER .
4. @Alan Если бы SetLastError был вызван, он бы так и сказал. Вы должны проверить наличие NULL или ERROR_INVALID_PARAMETER . Это режимы сбоя.
5. Страница онлайн-библиотеки MSDN не работает, в отличие от моих локальных копий. Он определенно устанавливает возвращаемое значение GetLastError.
Ответ №1:
Если эта функция случайно выходит из строя, я был бы склонен думать, что буфер неправильно отформатирован или испорчен. Вернитесь к коду, который создает буфер, и посмотрите, не завершилась ли там какая-либо из функций ошибкой. Я подозреваю, что статус возврата функции проверяется неправильно до продолжения кода.