Управление данными состояния модулей MFC

Замечание

Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

В этой статье рассматриваются данные состояния модулей MFC и их обновление, когда поток выполнения (путь, который проходит код в приложении во время выполнения) входит в модуль и выходит из него. Также рассматривается переключение состояний модуля с помощью AFX_MANAGE_STATE и макросов METHOD_PROLOGUE.

Замечание

Термин "модуль" здесь относится к исполняемой программе или библиотеке DLL (или набору БИБЛИОТЕК DLL), которые работают независимо от остальной части приложения, но используют общую копию библиотеки DLL MFC. Элемент управления ActiveX является типичным примером модуля.

Как показано на следующем рисунке, MFC содержит данные о состоянии для каждого модуля, используемого в приложении. Примерами этих данных являются дескрипторы экземпляров Windows (используемые для загрузки ресурсов), указатели на текущие CWinApp и CWinThread объекты приложения, счетчики ссылок на модуль OLE и различные карты, поддерживающие соединения между дескрипторами объектов Windows и соответствующими экземплярами объектов MFC. Однако, если приложение использует несколько модулей, данные о состоянии каждого модуля не распространяются на всё приложение. Вместо этого каждый модуль имеет собственную частную копию данных состояния MFC.

Схема, показывающая данные состояния одного модуля.
Данные о состоянии одного модуля (приложения)

Данные о состоянии модуля содержатся в структуре и всегда доступны с помощью указателя на ту структуру. Когда поток выполнения входит в определенный модуль, как показано на следующем рисунке, состояние модуля должно быть текущим или эффективным. Таким образом, каждый объект потока имеет указатель на эффективную структуру состояния этого приложения. Постоянно обновляя этот указатель, важно управлять глобальным состоянием приложения и поддерживать целостность состояния каждого модуля. Неправильное управление глобальным состоянием может привести к непредсказуемому поведению приложения.

Данные о состоянии нескольких модулей.
Данные о состоянии нескольких модулей

Другими словами, каждый модуль отвечает за правильное переключение между состояниями модуля во всех его точках входа. Точка входа — это любое место, в котором поток выполнения может ввести код модуля. К точкам входа относятся:

См. также

Общие разделы MFC