Поделиться через


Функция DispInvoke (oleauto.h)

Автоматически вызывает функции-члены в интерфейсе с учетом сведений о типе интерфейса. Вы можете описать интерфейс с информацией о типе и реализовать Invoke для интерфейса с помощью этого одного вызова.

Синтаксис

HRESULT DispInvoke(
  void       *_this,
  ITypeInfo  *ptinfo,
  DISPID     dispidMember,
  WORD       wFlags,
  DISPPARAMS *pparams,
  VARIANT    *pvarResult,
  EXCEPINFO  *pexcepinfo,
  UINT       *puArgErr
);

Параметры

_this

Реализация интерфейса IDispatch, описанная в ptinfo.

ptinfo

Сведения о типе, описывающие интерфейс.

dispidMember

Вызываемый член. Используйте GetIDsOfNames или документацию объекта, чтобы получить DISPID.

wFlags

Флаги, описывающие контекст вызова Invoke .

Значение Значение
DISPATCH_METHOD
Член вызывается как метод . Если свойство имеет одинаковое имя, можно задать как этот, так и DISPATCH_PROPERTYGET флаг.
DISPATCH_PROPERTYGET
Элемент извлекается как свойство или элемент данных.
DISPATCH_PROPERTYPUT
Элемент изменяется как свойство или элемент данных.
DISPATCH_PROPERTYPUTREF
Элемент изменяется с помощью назначения ссылки, а не назначения значения. Этот флаг действителен, только если свойство принимает ссылку на объект .

pparams

Указатель на структуру, содержащую массив аргументов, массив аргументов DISPID для именованных аргументов и число элементов в массивах.

pvarResult

Указатель на место, где должен храниться результат, или значение NULL, если вызывающий объект не ожидает результата. Этот аргумент игнорируется, если указан DISPATCH_PROPERTYPUT или DISPATCH_PROPERTYPUTREF.

pexcepinfo

Указатель на структуру, содержащую сведения об исключении. Эта структура должна быть заполнена, если возвращается DISP_E_EXCEPTION.

puArgErr

Индекс в rgvarg первого аргумента с ошибкой. Аргументы хранятся в pdispparams-rgvarg> в обратном порядке, поэтому первым аргументом является аргумент с наибольшим индексом в массиве. Этот параметр возвращается, только если итоговое возвращаемое значение равно DISP_E_TYPEMISMATCH или DISP_E_PARAMNOTFOUND.

Возвращаемое значение

Код возврата Описание
S_OK
Успешно.
DISP_E_BADPARAMCOUNT
Количество элементов, предоставляемых DISPPARAMS, отличается от числа аргументов, принятых методом или свойством .
DISP_E_BADVARTYPE
Один из аргументов в DISPPARAMS не является допустимым типом варианта.
DISP_E_EXCEPTION
Приложение должно вызвать исключение. В этом случае необходимо заполнить структуру, переданную в pexcepinfo .
DISP_E_MEMBERNOTFOUND
Запрошенный элемент не существует.
DISP_E_NONAMEDARGS
Эта реализация IDispatch не поддерживает именованные аргументы.
DISP_E_OVERFLOW
Один из аргументов в DISPPARAMS не может быть принужен к указанному типу.
DISP_E_PARAMNOTFOUND
Один из идентификаторов параметров не соответствует параметру метода . В этом случае параметру puArgErr присваивается первый аргумент, содержащий ошибку.
DISP_E_PARAMNOTOPTIONAL
Обязательный параметр был опущен.
DISP_E_TYPEMISMATCH
Не удалось привести один или несколько аргументов. Индекс первого параметра с неправильным типом в rgvarg возвращается в puArgErr.
E_INVALIDARG
Один из параметров недопустим.
E_OUTOFMEMORY
Недостаточно памяти для завершения операции.
 

Также можно вернуть любую ошибку ITypeInfo::Invoke .

Комментарии

Параметр _this является указателем на реализацию отложенного интерфейса. DispInvoke создает кадр стека, принуждает параметры с помощью стандартных правил приведения, помещает их в стек, а затем вызывает правильную функцию-член в ФАЙЛЕ ПАРАМЕТРОВ.

Примеры

Следующий код из примера файла Lines Lines.cpp реализует вызов с помощью DispInvoke. Эта реализация использует DispInvoke для проверки входных аргументов. Чтобы свести к минимуму риски безопасности, включите код, который выполняет более надежную проверку входных аргументов.

STDMETHODIMP
CLines::Invoke(
   DISPID dispidMember,
   REFIID riid,
   LCID lcid,
   WORD wFlags,
   DISPPARAMS * pdispparams,
   VARIANT * pvarResult,
   EXCEPINFO* pexcepinfo,
   UINT * puArgErr)
{
   return DispInvoke(
   this, m_ptinfo,
   dispidMember, wFlags, pdispparams,
   pvarResult, pexcepinfo, puArgErr); 
}

Требования

Требование Значение
Целевая платформа Windows
Header oleauto.h
Библиотека OleAut32.lib
DLL OleAut32.dll

См. также раздел

CreateStdDispatch

Создание функций API диспетчеризации

IDispatch

IDispatch::Invoke

ITypeInfo::Invoke