Как добавить и реализовать новый интерфейс для COM-сервера Inproc - PullRequest
1 голос
/ 12 июля 2011

Я реализовал Windows Deskband (используя пример Windows SDK) и мне нужен способ связи (один вызов для запуска IPC с другим приложением, IPC уже работает) с ним.

Мой опыт работы с COMочень ограничен, но экстраполируя из того, что я видел, я думаю, что должно быть возможно создать новый интерфейс COM, внедрить его в объект десктопа (к которому у меня есть доступ через IBandSite), вызвать QueryInterface () для моего собственного интерфейса наэто и затем используйте это, чтобы позвонить непосредственно в настольную ленту.

Я пробовал это, но столкнулся с проблемами очень быстро (основная причина: я понятия не имею, что я на самом деле делаю большую часть времени ...)

Итак, мойвопросы: Является ли это жизнеспособным подходом, и может ли кто-нибудь дать мне схему того, как действовать, если это так (или указать на какой-то ресурс, который может быть полезен - если не считать книгу COM, которая будет моим последним подходом).Если это не так, приходят ли на ум альтернативы?

Спасибо за ваше время и наилучшие пожелания,

Рене.

1 Ответ

0 голосов
/ 13 июля 2011

Вот ваш путь: вы добавляете новый интерфейс в файл .idl, а также, если у вас есть совместный класс в файле .idl, соответствующий вашему COM-объекту, вы указываете этот новый интерфейс в определении совместного класса. Затем вы компилируете .idl, и вы получаете файл .h и .c с идентификаторами - определения интерфейса C ++ IID и C ++.

Затем вы наследуете свой класс C ++ COM-объекта от интерфейса C ++ и реализуете все его методы. Если по какой-либо причине вы не можете или не хотите реализовывать метод, вы должны вернуть E_NOTIMPL из реализации этого метода.

Одна очень важная заключительная вещь: вам нужно изменить QueryInterface() поведение в вашем классе COM-объектов. Если вы используете ATL, вы должны добавить запись в карту COM. Если вы не используете ATL, измените QueryInterface() - см. в этом вопросе о том, как реализовать QueryInterface() в случае реализации нескольких интерфейсов COM.

...