Функция 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 .
pparams
Указатель на структуру, содержащую массив аргументов, массив аргументов DISPID для именованных аргументов и число элементов в массивах.
pvarResult
Указатель на место, где должен храниться результат, или значение NULL, если вызывающий объект не ожидает результата. Этот аргумент игнорируется, если указан DISPATCH_PROPERTYPUT или DISPATCH_PROPERTYPUTREF.
pexcepinfo
Указатель на структуру, содержащую сведения об исключении. Эта структура должна быть заполнена, если возвращается DISP_E_EXCEPTION.
puArgErr
Индекс в rgvarg первого аргумента с ошибкой. Аргументы хранятся в pdispparams-rgvarg> в обратном порядке, поэтому первым аргументом является аргумент с наибольшим индексом в массиве. Этот параметр возвращается, только если итоговое возвращаемое значение равно DISP_E_TYPEMISMATCH или DISP_E_PARAMNOTFOUND.
Возвращаемое значение
Код возврата | Описание |
---|---|
|
Успешно. |
|
Количество элементов, предоставляемых DISPPARAMS, отличается от числа аргументов, принятых методом или свойством . |
|
Один из аргументов в DISPPARAMS не является допустимым типом варианта. |
|
Приложение должно вызвать исключение. В этом случае необходимо заполнить структуру, переданную в pexcepinfo . |
|
Запрошенный элемент не существует. |
|
Эта реализация IDispatch не поддерживает именованные аргументы. |
|
Один из аргументов в DISPPARAMS не может быть принужен к указанному типу. |
|
Один из идентификаторов параметров не соответствует параметру метода . В этом случае параметру puArgErr присваивается первый аргумент, содержащий ошибку. |
|
Обязательный параметр был опущен. |
|
Не удалось привести один или несколько аргументов. Индекс первого параметра с неправильным типом в rgvarg возвращается в puArgErr. |
|
Один из параметров недопустим. |
|
Недостаточно памяти для завершения операции. |
Также можно вернуть любую ошибку 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 |