Как инфраструктура MFC получает дескриптор глобального объекта Application? - PullRequest
1 голос
/ 12 ноября 2010

В последние несколько дней у меня есть один вопрос:

В MFC мы создаем объект приложения, полученный из CWinApp. Мы создаем этот объект глобально. Таким образом, среда MFC будет использовать этот объект для запуска приложения.

Но я не знаю, как структура фрейма узнает о моем глобальном объекте.

Пожалуйста, объясните мне внутренний механизм, посредством которого MFC узнает об объекте приложения.

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

После отладки примера приложения MFC я узнал, как фреймворк знает об объекте приложения.

Объект приложения является глобальным и наследуется от CWinApp. Поскольку объект является глобальным, этот объект создается до вызова WinMain. При создании производного объекта вызывается конструктор класса CWinApp; в это время фреймворк захватывает дескриптор:

pModuleState->m_pCurrentWinApp = this;

Приведенная выше строка скопирована из конструктора MFC CWinApp::CWinApp(LPCTSTR lpszAppName). Если вы хотите получить более подробную информацию, перейдите к определению и объявлению класса CWinApp.

1 голос
/ 13 ноября 2010

С MSDN :

Каждое приложение, использующее классы Microsoft Foundation, может содержать только один объект, полученный из CWinApp.Этот объект создается при создании других глобальных объектов C ++ и уже доступен, когда Windows вызывает функцию WinMain, которая предоставляется библиотекой классов Microsoft Foundation.Объявите ваш производный объект CWinApp на глобальном уровне.

По сути, поскольку ваш объект CWinApp является глобальной переменной, к тому времени, когда приложение получает WinMain, оно уже создало экземпляр вашего объекта CWinApp.И поскольку может быть только один объект CWinApp, он знает, что это один.

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