Реферат: Перехват методов COM интерфейсов
hr = spFoo.CoCreateInstance(__uuidof(Foo));
CComPtr<ICallInterceptor> spInt;
hr = CoGetInterceptor(__uuidof(IFoo), 0, __uuidof(ICallInterceptor),
reinterpret_cast<void**>(&spInt));
С помощью указателя на интерфейс ICallInterceptor мы можем зарегистрировать свои собственные обработчики вызовов:
Методы ICallInterceptor | Описание |
HRESULT RegisterSink(ICallFrameEvents * psink); | Зарегистрировать обработчик |
HRESULT GetRegisteredSink(ICallFrameEvents ** ppsink); | Получить зарегистрированный обработчик |
ПРИМЕЧАНИЕ Другие методы ICallInterceptor описаны в MSDN |
Обработчик должен реализовать интерфейс ICallFrameEvents.
Методы ICallFraneEvent | Описание |
HRESULT OnCall(ICallFrame * pFrame); | Вызов метода перехватываемого интерфейса |
После регистрации обработчика мы будем получать событие OnCall каждый раз, когда клиент будет осуществлять вызов через перехватываемый интерфейс.
Дополним код клиента (см. выше) – теперь мы будем регистрировать свой обработчик вызовов:
class CallHandler : public CComObjectRoot, public ICallFrameEvents { public: BEGIN_COM_MAP(CallHandler) COM_INTERFACE_ENTRY(ICallFrameEvents) END_COM_MAP() STDMETHOD(OnCall)(ICallFrame* pFrame) { return S_OK; } }; ... CComPtr<ICallInterceptor> spInt; hr = CoGetInterceptor(__uuidof(IFoo), 0, __uuidof(ICallInterceptor), reinterpret_cast<void**>(&spInt)); CComObject<CallHandler>* pHandler = 0; CComObject<CallHandler>::CreateInstance(&pHandler); hr = spInt->RegisterSink(pHandler); К-во Просмотров: 673
Бесплатно скачать Реферат: Перехват методов COM интерфейсов
|