Предполагая, что GetDC (hWnd) вызывается как первая инструкция для WM_CREATE, для окна hWnd, возможно ли для GetDC () вернуть NULL? - PullRequest
2 голосов
/ 24 ноября 2011

Предполагая, что GetDC(hWnd) вызывается как первая инструкция для WM_CREATE, для окна hWnd, возможно ли для GetDC() вернуть NULL?

Я обеспокоен возможностью сбоя GetDC() из-за нехватки ресурсов. Когда это произойдет, я должен проверить на ошибки? И что мне делать, если звонок не удался? Вызывает ли функция Win32 API исключения или я должен вызывать исключения?

1 Ответ

3 голосов
/ 25 ноября 2011

GetDC() действительно может дать сбой, независимо от того, когда и где вы его называете. При работе с API следует придерживаться довольно пессимистичного взгляда и быть готовым к сбою любой функции API. Как вы предлагаете, одной из возможных причин сбоя является исчерпание системных ресурсов, например, дескрипторы ядра, объекты GDI и т. д.

Так что вы всегда должны проверять ошибки. И не только GetDC(), каждый вызов функции API должен проверять возвращаемое значение.

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

Если вы столкнулись с ошибкой в ​​функции GDI, такой как GetDC(), вы ничего не можете сделать. В описанном вами сценарии я регистрирую ошибку или сообщаю о ней пользователю, а затем прекращаю выполнение. Там обычно нет восстановления после сбоя GetDC().

Боль при проверке ошибок каждый раз, когда вызывается функция API, является одной из причин, почему у нас так много фреймворков, которые оборачивают низкоуровневый API. Хороший фреймворк сделает проверку ошибок для вас и преобразует любые ошибки в исключения. Использование хорошей среды позволяет вам сконцентрироваться на нормальном потоке выполнения и не засорять ваш код обработкой кода для исключительных случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...