Шаг 53 - ATL DECLARE_REGISTRY_RESOURCEID

Данный макрос включается автоматически при создании объекта на основе ATL:

/////////////////////////////
// Ceee

class ATL_NO_VTABLE Ceee: 
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl
{
public:
Ceee()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_EEE)

Смысл этого макроса обновить системный реестр путем вызова функции UpdateRegistryFromResource():

#define DECLARE_REGISTRY_RESOURCE(x)\
static HRESULT WINAPI UpdateRegistry(BOOL bRegister)\
{\
return _Module.UpdateRegistryFromResource(_T(#x), bRegister);\
}

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

53_1.gif (6958 b)

Данная методика применяется часто при работе с OLE. Например, если Вы создаете приложение сервер ActiveX, то там то же при запуске приложения производится обновления реестра:

// When a server application is launched stand-alone, it is a good idea
// to update the system registry in case it has been damaged.
m_server.UpdateRegistry(OAT_INPLACE_SERVER);
// Dispatch commands specified on the command line

Этот подход чрезвычайно грамотный на мой взгляд. Запустил приложение, а оно взяло и зарегистрировало компоненты. Именно такая возможность при запуске, а не только при инсталляции. И хотя здесь приложение регистрируем само себя, но не тяжело добавиться и регистрацию других.


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