Он не бомбит код ошибки winapi, фактический код ошибки - E_FAIL, код ошибки COM. Который очень бесполезен для диагностики чего-либо, это не означает ничего больше, чем «не мог сделать, не знаю почему». О том, как GetDC () может генерировать этот код ошибки, очень трудно догадаться, я подозреваю, что это связано с чем-то, перехватывающим функцию winapi Возможно, что-то похожее на удаленный рабочий стол или рекордер экрана. Попробуйте запустить это на другом компьютере.
«Нормальная» причина сбоя GetDC () - утечка дескриптора. Windows перестает давать процессу больше дескрипторов, когда она уже израсходовала 10 000. Что-то, что вы можете диагностировать с помощью TaskMgr.exe, вкладка «Процессы». Просмотр + Выбор столбцов и отметьте маркеры, объекты пользователя и объекты GDI. Сначала проверьте список процессов и убедитесь, что у вас нет процесса, который потребляет их много. Общее количество объектов GDI для всех процессов в сеансе ограничено размером пула сеансов. Затем запустите вашу программу и следите за значениями для вашего процесса.