Отменяет ли регистрацию класса окна PostQuitMessage

148
28 апреля 2018, 18:07

Когда мое приложение стартует, RegisterClassEx иногда возвращает 0, и приложение приходится аварийно завершать. Это происходит не по тому ли что иногда класс окна не уничтожается, а остается в памяти менеджера окон? Нужно ли мне вызывать UnregisterClass вручную после получения сообщения WM_DESTROY и вызова PostQuitMessage?

Еще приведу цитату с одного из сайтов по winapi:

Регистрация всех классов окон, которые зарегистрировало приложение, должна быть отменена при его завершении.

От чего появляется мнение что программист обязан отменять регистрацию классов окон независимо от обстоятельств.

Answer 1

Функцию UnregisterClass не нужно вызывать при завершении приложения: при этом все классы разрегистрируются автоматически. Ее нужно вызывать в случае, если класс создается из DLL, перед выгрузкой DLL из памяти. Если такой класс не разрегистрировать, память под него не будет освобождена, а также попытки обращения к его оконной процедуре положат всю программу с Access Violation.

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

Ссылки:

About Windows Classes

Why RegisterClass fails with ERROR_NOT_ENOUGH_MEMORY?

READ ALSO
Как динамически с помощью переменных и регулярного выражения поменять последнее значение в строке?

Как динамически с помощью переменных и регулярного выражения поменять последнее значение в строке?

Нужно динамически с помощью переменных и регулярного выражения поменять последнее значение в строкеВ первом случае работает во втором нет

195
Как отображать и изменять файлы на сайте

Как отображать и изменять файлы на сайте

Нужно чтобы в saidbar'е отображать файлы HTML,CSS,JS,PHP, а в контенте содержимое этого файлаКак это сделать?

153