Сущность технологии COM



         

Динамический вызов в сравнении со статическим - часть 6


Метод Invoke реализован аналогичным образом:

STDMETHODIMP PrimeManager::Invoke(DISPID id, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pd, VARIANT *pVarResult, EXCEPINFO *pe, UINT *pu) { assert(riid == IID_NULL); void *pvThis = static_cast<DIPrimeManager*>(this); return m_pTypeInfo->Invoke(pvThis, id, wFlags, pd, pVarResult, pe, pu); }

Рис. 7.6. Динамический вызов и двойственные интерфейсы

Первым параметром ITypeInfo::Invoke является указатель на интерфейс. Тип этого интерфейса должен быть таким же, как интерфейс, который описан в информации о типах. Когда передаваемые аргументы корректно синтаксически преобразованы в стек вызова (call stack), синтаксический анализатор будет вызывать текущие методы через этот интерфейсный указатель. Рис. 7.6 иллюстрирует последовательность вызовов для сред подготовки сценариев, которые осуществляют вызовы через двойственные интерфейсы.




Содержание  Назад  Вперед