Учебник по Visual C++ .Net


Загадочные макросы Вернемся в - часть 2


static LPCOLESTR GetAppId ()throw ()

{

//====== Преобразование к формату OLE-строки

return OLESTR("{E4541023-7425-4AA7-998C-D016DF796716}") ;

}

static TCHAR* GetAppIdTO throw ()

{

//====== Преобразование к Unicode или char* строке

return _T("{E4541023-7425-4AA7-998C-D016DF796716}") ;

}

// Если bRegister==TRUE, то происходит запись в реестр,

// иначе - удаление записи

static HRESULT WINAPI UpdateRegistryAppId(BOOL bRegister) throw()

{

_ATL_REGMAP_ENTRY aMapEntries [] =

{

{ OLESTRC'APPID") , GetAppIdO }, { NULL, NULL }

};

return ATL::_pAtlModule->UpdateRegistryFromResource( IDR ATLGL, bRegister, aMapEntries);

В данный момент вы сможете найти в реестре свой ключ и ассоциированную с ним строку (ATLGL) по адресу:

HKEY_CLASSES_ROOT\AppID\

{E4541023-7425-4AA7-998C-D016DF796716}

При запуске приложения вышеописанные функции были вызваны каркасом приложения и произвели записи в реестр. Отметьте также, что в реестре появилась еще одна (симметричная) запись по адресу HKEY_CLASSES_ROOT \APPID\ATLGL.DLL. Она ассоциирует строковый GUID с библиотекой ATLGL.DLL. Рассматриваемая строка-идентификатор встречается еще в нескольких разделах проекта, найдите их, чтобы получить ориентировку: в ресурсе "REGISTRY" > IDR_ATLGL (см. окно Resource View) и в файле сценария регистрации ATL.GL.rgs (см. окно Solution Explorer).

Возвращаясь к первому макросу DECLARE_LIBID(LiBiojvTLGLLib), отметим, что скрытая за ним функция initLibid тоже была вызвана каркасом и использована для регистрации библиотеки типов будущего СОМ-объекта. Вы можете найти эту, значительно более подробную, запись по ключу (цифры мои):

HKEY_CLASSES_ROOT\TypeLib\

{E60605BC-9DE2-4563-A7AF-8A8C4E804058}




Начало  Назад  Вперед



Книжный магазин