Есть некий интерфейс 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>, но что-то как-то криво это выглядит.
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
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, 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
Вопрос остается в силе!
вопрос снимается. ТК ответил почти правильно, но применять надо
COM_INTERFACE_ENTRY2(IDispatch, IInterface1)