Визуальное программирование и MFC

       

Регистрация сервера


После компиляции программы автоматизированного сервера следует произвести его регистрацию в системе, чтобы он мог быть использован клиентами. Именно здесь понадобится третья из предложенных мастером AppWizard функций - DllRegisterServer. Осуществить регистрацию всех автоматизированных объектов, присутствующих на сервере, может любая программа Windows, обратившаяся к этой функции. В системные файлы Windows входит программа regsvr32, которая загрузит DLL модуль сервера и вызовет функцию DllRegisterServer (команда regsvr32.exe SvrDll):

STDAPI DllRegisterServer(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); COleObjectFactory::UpdateRegistryAll(); return S_OK; }

DllRegisterServer обращается к функции COleObjectFactory::UpdateRegistryAll, котора просматривает связанный список имеющихся фабрик класса и сообщает, что каждая из них должна обновить системный реестр для своих объектов.

Достаточно странно, но мастер AppWizard не предоставляет отдельной функции для удаления информации о серверах из реестра. Единственное, что придется сделать, чтобы восполнить пробел, - это ввести дополнительную функцию DllUnregisterServer, практически идентичную DllRegisterServer:

STDAPI DllUnregisterServer(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); COleObjectFactory::UpdateRegistryAll(FALSE); return S_OK; }

Отличается она лишь аргументом, передаваемым функции UpdateRegistryAll, благодаря которому каждому генератору класса будет выставлено требование удалить из реестра информацию относительно своих объектов Automation. Теперь при вызове модуля regsvr32 с параметром /u (команда regsvr32.exe /u SvrDll) произойдет запуск данной функции и информация о сервере в реестре будет уничтожена.



Содержание раздела