Шаг 325 - Макрос AFX_MANAGE_STATE

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

AFX_MANAGE_STATE( AFX_MODULE_STATE* pModuleState )

При выполнении обычного модуля есть только одна таблица состояния:

325_1.gif (890 b)

Я не зря написал MFC модуль, это может быть как MFC EXE, так и MFC DLL. У каждого модуля своя таблица состояния. Раз так, то при выполнении другого модуля, который использует MFC, например, DLL, которая использует MFC или объектов OLE нужно переключаться на таблицу состояния этого модуля. Именно это и делает данный макрос.

325_2.gif (3722 b)

Если такое переключение не выполнять, то результат работы может быть любой. К счастью в большинстве случаев AppWizard это умеет делать. Посмотрите, например, на функцию DllRegisterServer():

/////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry

STDAPI DllRegisterServer(void)
{
	AFX_MANAGE_STATE(_afxModuleAddrThis);
	if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
		return ResultFromScode(SELFREG_E_TYPELIB);

	if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
		return ResultFromScode(SELFREG_E_CLASS);

	return NOERROR;
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.