GetDC()
действительно может дать сбой, независимо от того, когда и где вы его называете. При работе с API следует придерживаться довольно пессимистичного взгляда и быть готовым к сбою любой функции API. Как вы предлагаете, одной из возможных причин сбоя является исчерпание системных ресурсов, например, дескрипторы ядра, объекты GDI и т. д.
Так что вы всегда должны проверять ошибки. И не только GetDC()
, каждый вызов функции API должен проверять возвращаемое значение.
Windows API не сигнализирует об ошибках, вызывая исключения. Вместо этого ошибки всегда сигнализируются через значения, возвращаемые функцией API. Вам необходимо ознакомиться с документацией, чтобы понять, как каждая отдельная функция сообщает об ошибках.
Если вы столкнулись с ошибкой в функции GDI, такой как GetDC()
, вы ничего не можете сделать. В описанном вами сценарии я регистрирую ошибку или сообщаю о ней пользователю, а затем прекращаю выполнение. Там обычно нет восстановления после сбоя GetDC()
.
Боль при проверке ошибок каждый раз, когда вызывается функция API, является одной из причин, почему у нас так много фреймворков, которые оборачивают низкоуровневый API. Хороший фреймворк сделает проверку ошибок для вас и преобразует любые ошибки в исключения. Использование хорошей среды позволяет вам сконцентрироваться на нормальном потоке выполнения и не засорять ваш код обработкой кода для исключительных случаев.