Реестр и Visual 2008
От: Muxeu  
Дата: 25.05.10 12:56
Оценка:
Люди, объясните как правильно регистрировать СОМ-объект в реестре, чтобы потом, по его ProgID, можно было вызывать из других программ, пользующихся его функциями. Если можно, то пример на Visual С++ 2008, так как в ней работаю.

25.05.10 17:03: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Реестр и Visual 2008
От: sidorov18 США  
Дата: 25.05.10 13:12
Оценка:
Здравствуйте, Muxeu, Вы писали:

M>Люди, объясните как правильно регистрировать СОМ-объект в реестре, чтобы потом, по его ProgID, можно было вызывать из других программ, пользующихся его функциями. Если можно, то пример на Visual С++ 2008, так как в ней работаю.


Создай COM сервер проект на ATL, а потом добавь туда ATL класс(визардом). у тебя в ресурсах появится *.rgs файл — это скрипт, который ATL использует для добавления данных в реестр. там все, что нужно для твоего класса. Регистрация также происходит автоматически, при регистрации самого сервера.
Re: Реестр и Visual 2008
От: Кодт Россия  
Дата: 25.05.10 13:19
Оценка:
Здравствуйте, Muxeu, Вы писали:

M>Люди, объясните как правильно регистрировать СОМ-объект в реестре, чтобы потом, по его ProgID, можно было вызывать из других программ, пользующихся его функциями. Если можно, то пример на Visual С++ 2008, так как в ней работаю.


Создай визардом ATL-проект и в нём COM-объект, он тебе почти всё сам сделает. Потом посмотришь на нагенерённые файлы.
Если же ты уже написал объект, и тебе надо только добавить к нему ProgID — то смотри, что у него прописано в объявлении класса
— если DECLARE_REGISTRY_RESOURCEID(IDR_xxxxx), то добавь в соответствующий .rgs несколько строчек
HKCR
{
    Demobject.DemoObject.1 = s 'DemoObject Class'
    {
        CLSID = s '{E153F9F0-BE67-41BB-AAF7-D9F13FF8DBEE}'
    }
    Demobject.DemoObject = s 'DemoObject Class'
    {
        CLSID = s '{E153F9F0-BE67-41BB-AAF7-D9F13FF8DBEE}'
        CurVer = s 'Demobject.DemoObject.1'
    }
    NoRemove CLSID
    {
        ForceRemove {E153F9F0-BE67-41BB-AAF7-D9F13FF8DBEE} = s 'DemoObject Class'
        {
            ProgID = s 'Demobject.DemoObject.1'
            VersionIndependentProgID = s 'Demobject.DemoObject'
            ForceRemove 'Programmable'
            InprocServer32 = s '%MODULE%'
            {
                val ThreadingModel = s 'Apartment'
            }
            'TypeLib' = s '{D09D11FC-4CEF-47BA-B285-9EA2FDD313E0}'
        }
    }
}

— если DECLARE_NO_REGISTRY — замени на DECLARE_REGISTRY, либо на DECLARE_REGISTRY_RESOURECEID, напиши .rgs-файл и добавь его в ресурсы.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.