Метод IDispatch::Invoke (oaidl.h)
Предоставляет доступ к открытым свойствам и методам объекта. Функция диспетчеризации DispInvoke предоставляет стандартную реализацию Invoke.
Синтаксис
HRESULT Invoke(
[in] DISPID dispIdMember,
[in] REFIID riid,
[in] LCID lcid,
[in] WORD wFlags,
[in, out] DISPPARAMS *pDispParams,
[out] VARIANT *pVarResult,
[out] EXCEPINFO *pExcepInfo,
[out] UINT *puArgErr
);
Параметры
[in] dispIdMember
Идентифицирует член. Используйте GetIDsOfNames или документацию объекта для получения идентификатора диспетчеризации.
[in] riid
Зарезервировано для будущего использования. Должно быть равным IID_NULL.
[in] lcid
Контекст языкового стандарта, в котором следует интерпретировать аргументы. Lcid используется функцией GetIDsOfNames и также передается в Invoke, чтобы позволить объекту интерпретировать свои аргументы, относящиеся к языковому стандарту.
Приложения, которые не поддерживают несколько национальных языков, могут игнорировать этот параметр. Дополнительные сведения см. в статье Поддержка нескольких национальных языков и Предоставление объектов ActiveX.
[in] wFlags
Флаги, описывающие контекст вызова Invoke .
[in, out] pDispParams
Указатель на структуру DISPPARAMS, содержащую массив аргументов, массив DISPID аргументов для именованных аргументов и число элементов в массивах.
[out] pVarResult
Указатель на расположение, в котором должен храниться результат, или значение NULL, если вызывающий объект не ожидает результата. Этот аргумент игнорируется, если указан DISPATCH_PROPERTYPUT или DISPATCH_PROPERTYPUTREF.
[out] pExcepInfo
Указатель на структуру, содержащую сведения об исключении. Эта структура должна быть заполнена, если возвращается DISP_E_EXCEPTION. Может иметь значение NULL.
[out] puArgErr
Индекс в rgvarg первого аргумента с ошибкой. Аргументы хранятся в pDispParams-rgvarg> в обратном порядке, поэтому первым аргументом является аргумент с наибольшим индексом в массиве. Этот параметр возвращается, только если итоговое возвращаемое значение равно DISP_E_TYPEMISMATCH или DISP_E_PARAMNOTFOUND. Для этого аргумента можно задать значение NULL. Дополнительные сведения см. в разделе Возврат ошибок.
Возвращаемое значение
Этот метод может возвращать одно из этих значений.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Количество элементов, предоставляемых DISPPARAMS, отличается от числа аргументов, принятых методом или свойством . |
|
Один из аргументов в DISPPARAMS не является допустимым типом варианта. |
|
Приложение должно вызвать исключение. В этом случае необходимо заполнить структуру, переданную в pexcepinfo . |
|
Запрошенный элемент не существует. |
|
Эта реализация IDispatch не поддерживает именованные аргументы. |
|
Один из аргументов в DISPPARAMS не может быть принужен к указанному типу. |
|
Один из идентификаторов параметров не соответствует параметру метода . В этом случае параметру puArgErr присваивается первый аргумент, содержащий ошибку. |
|
Не удалось привести один или несколько аргументов. Индекс первого параметра с неправильным типом в rgvarg возвращается в puArgErr. |
|
Идентификатор интерфейса, переданный в riid, не IID_NULL. |
|
Вызываемый член интерпретирует строковые аргументы в соответствии с LCID, а LCID не распознается. Если LCID не требуется для интерпретации аргументов, эту ошибку не следует возвращать. |
|
Обязательный параметр был опущен. |
Комментарии
Как правило, не следует реализовывать invoke напрямую. Вместо этого используйте интерфейс диспетчеризации для создания функций CreateStdDispatch и DispInvoke. Дополнительные сведения см. в разделах CreateStdDispatch, DispInvoke, Создание интерфейса IDispatch и Предоставление объектов ActiveX.
Если перед вызовом члена требуется выполнить обработку для конкретного приложения, код должен выполнить необходимые действия, а затем вызвать ITypeInfo::Invoke для вызова элемента. ITypeInfo::Invoke действует точно так же, как Invoke. Стандартные реализации Invoke, созданныеCreateStdDispatch и DispInvoke , откладываются на ITypeInfo::Invoke.
В клиенте ActiveX метод Invoke следует использовать для получения и задания значений свойств или для вызова метода объекта ActiveX. Аргумент dispIdMember идентифицирует вызываемый член. Идентификаторы DISPID, идентифицирующие элементы, определяются реализующим объектом и могут быть определены с помощью документации объекта, функции IDispatch::GetIDsOfNames или интерфейса ITypeInfo .
При использовании IDispatch::Invoke() с DISPATCH_PROPERTYPUT или DISPATCH_PROPERTYPUTREF необходимо специально инициализировать элементы cNamedArgs и rgdispidNamedArgs структуры DISPPARAMS следующим образом:
DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;
Следующая информация предназначена для разработчиков клиентов ActiveX и других пользователей, которые используют код для предоставления доступа к объектам ActiveX. В нем описывается поведение, которое пользователи предоставляемых объектов должны ожидать.
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | oaidl.h |