Контекст Windows GDI — CreateDIBSection

#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:

Если эта функция случайно выходит из строя, я был бы склонен думать, что буфер неправильно отформатирован или испорчен. Вернитесь к коду, который создает буфер, и посмотрите, не завершилась ли там какая-либо из функций ошибкой. Я подозреваю, что статус возврата функции проверяется неправильно до продолжения кода.