Здравствуйте, Andy77, Вы писали:
A>
A>что же я делаю неправильно?
A>имеем событийный интерфейс (оставил только существенное)...
A>A> dispinterface _IPlateDataEvents
A> {
A> properties:
A> methods:
A> [id(1), helpstring("Fired when plate size or labeling changed")]
A> HRESULT onChange();
A> };
A>
A>теперь пишем класс для подключения к событиям
A>A>#pragma once
A>#import "GenericPlateData.tlb" no_namespace
A>[event_receiver(com)]
A>class PlateDataEventsReceiver
A>{
A>public:
A> PlateDataEventsReceiver() {}
A> virtual ~PlateDataEventsReceiver() {}
A> void hook(IUnknown* pSource)
A> {
A> __hook(&_IPlateDataEvents::onChange, pSource, &PlateDataEventsReceiver::onChange);
A> }
A> HRESULT onChange() { return S_OK; }
A>};
A>
A>и тут компилятор нам выдаёт
A>error C3731: incompatible event 'HRESULT _IPlateDataEvents::onChange(void)' and handler 'HRESULT PlateDataEventsReceiver::onChange(void)'; event source and event handler must have the same event type
A> The event type of '_IPlateDataEvents' is 'native'.
A> The event type of 'PlateDataEventsReceiver' is 'COM'.
A>действительно, в .tli и .tlh _IPlateDataEvents объявлен как простой интерфейс, что же делать?
ответьте если кто знает, тоже очень интересно