Добавить IDispatch
От: Lyvra  
Дата: 28.11.03 08:02
Оценка:
Есть некий интерфейс IInterface1 который необходимо реализовать для СОМ-объекта —
public IDispatchImpl<IInterface1 , &IID_IInterface1, &LIBID_Interface1>.
Сам объект передается во внешний мир как IDispatch, т.е. он должен выдавать IDispatch при ::QueryInterface(IID_IDispatch, ...) — COM_INTERFACE_ENTRY(IDispatch)

Вопрос — как без лишних телодвижений реализовать IDispatch для СОМ-объекта, притом что не хотелось бы заносить его в Idl файл (т.е. у этого СОМ нет своего интерфейса).

Я это сделал через: public IDispatchImpl<IDispatch, &IID_IDispatch, NULL>, но что-то как-то криво это выглядит.
Re: Добавить IDispatch
От: TK Лес кывт.рф
Дата: 28.11.03 18:16
Оценка:
Hello, "Lyvra"
> Есть некий интерфейс IInterface1 который необходимо реализовать для СОМ-объекта —
> public IDispatchImpl<IInterface1 , &IID_IInterface1, &LIBID_Interface1>.
> Сам объект передается во внешний мир как IDispatch, т.е. он должен выдавать IDispatch при ::QueryInterface(IID_IDispatch, ...) — COM_INTERFACE_ENTRY(IDispatch)
>
> Вопрос — как без лишних телодвижений реализовать IDispatch для СОМ-объекта, притом что не хотелось бы заносить его в Idl файл (т.е. у этого СОМ нет своего интерфейса).
>
> Я это сделал через: public IDispatchImpl<IDispatch, &IID_IDispatch, NULL>, но что-то как-то криво это выглядит.

Поддержка IDispatch уже предоставляется в IDispatchImpl<IInterface1 , &IID_IInterface1, &LIBID_Interface1>. Делать дополнительное описание IDispatchImpl<IDispatch, &IID_IDispatch, NULL> не нужно. Само собой, что COM_INTERFACE_ENTRY(IDispatch) должно присутствовать
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Добавить IDispatch
От: Lyvra  
Дата: 01.12.03 10:48
Оценка:
Здравствуйте, TK, Вы писали:

>> Есть некий интерфейс IInterface1 который необходимо реализовать для СОМ-объекта —

>> public IDispatchImpl<IInterface1 , &IID_IInterface1, &LIBID_Interface1>.
>> Сам объект передается во внешний мир как IDispatch, т.е. он должен выдавать IDispatch при ::QueryInterface(IID_IDispatch, ...) — COM_INTERFACE_ENTRY(IDispatch)
>>
>> Вопрос — как без лишних телодвижений реализовать IDispatch для СОМ-объекта, притом что не хотелось бы заносить его в Idl файл (т.е. у этого СОМ нет своего интерфейса).
>>
>> Я это сделал через: public IDispatchImpl<IDispatch, &IID_IDispatch, NULL>, но что-то как-то криво это выглядит.

TK>Поддержка IDispatch уже предоставляется в IDispatchImpl<IInterface1 , &IID_IInterface1, &LIBID_Interface1>. Делать дополнительное описание IDispatchImpl<IDispatch, &IID_IDispatch, NULL> не нужно. Само собой, что COM_INTERFACE_ENTRY(IDispatch) должно присутствовать



Здрям

Конечно же я это пробовал, но вот что он в этом случае выдает на месте COM_INTERFACE_ENTRY(IDispatch):

error C2440: 'static_cast' : cannot convert from 'class sa::CMyClass *' to 'struct IDispatch *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


Вопрос остается в силе!
Re[3]: Добавить IDispatch
От: Lyvra  
Дата: 01.12.03 12:54
Оценка:
вопрос снимается. ТК ответил почти правильно, но применять надо

COM_INTERFACE_ENTRY2(IDispatch, IInterface1)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.