IDispatch::Invoke 方法 (oaidl.h)

提供对某一对象公开的属性和方法的访问。 dispatch 函数 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

要在其中解释自变量的区域设置上下文。 lcidGetIDsOfNames 函数使用,并且也传递给 Invoke 以允许对象解释特定于区域设置的参数。

不支持多种语言的应用程序可以忽略此参数。 有关详细信息,请参阅 支持多种语言公开 ActiveX 对象

[in] wFlags

描述 Invoke 调用上下文的标志。

Value 含义
DISPATCH_METHOD
将成员作为方法调用。 如果属性具有相同的名称,则可以设置此标志和DISPATCH_PROPERTYGET标志。
DISPATCH_PROPERTYGET
该成员作为属性或数据成员进行检索。
DISPATCH_PROPERTYPUT
该成员将更改为属性或数据成员。
DISPATCH_PROPERTYPUTREF
该成员由引用赋值而不是值赋值更改。 仅当属性接受对对象的引用时,此标志才有效。

[in, out] pDispParams

指向包含参数数组、命名参数的参数 DISPID 数组以及数组中元素数的 DISPPARAMS 结构的指针。

[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。 有关详细信息,请参阅 返回错误

返回值

此方法可以返回其中一个值。

返回代码 说明
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
其中一个参数 ID 与方法上的参数不对应。 在这种情况下, puArgErr 设置为包含错误的第一个参数。
DISP_E_TYPEMISMATCH
无法强制一个或多个参数。 在 puArgErr 中返回具有错误类型的第一个参数的索引。
DISP_E_UNKNOWNINTERFACE

传入 riid 的接口标识符不是IID_NULL。
DISP_E_UNKNOWNLCID
调用的成员根据 LCID 解释字符串参数,并且无法识别 LCID。 如果不需要 LCID 来解释参数,则不应返回此错误
DISP_E_PARAMNOTOPTIONAL
省略了必需的参数。

注解

通常,不应直接实现 Invoke 。 请改用调度接口创建函数 CreateStdDispatchDispInvoke。 有关详细信息,请参阅 CreateStdDispatchDispInvoke创建 IDispatch 接口公开 ActiveX 对象

如果需要在调用成员之前执行某些特定于应用程序的处理,代码应执行必要的操作,然后调用 ITypeInfo::Invoke 来调用成员。 ITypeInfo::Invoke 的行为与 Invoke 完全相同。 CreateStdDispatchDispInvoke 创建的 Invoke 的标准实现遵循 ITypeInfo::Invoke

在 ActiveX 客户端中, Invoke 应用于获取和设置属性的值,或调用 ActiveX 对象的方法。 dispIdMember 参数标识要调用的成员。 标识成员的 DISPID 由对象的实现者定义,可以使用对象的文档、 IDispatch::GetIDsOfNames 函数或 ITypeInfo 接口来确定。

IDispatch::Invoke () 与DISPATCH_PROPERTYPUT或DISPATCH_PROPERTYPUTREF配合使用时,必须使用以下项专门初始化 DISPPARAMS 结构的 cNamedArgsrgdispidNamedArgs 元素:

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

后面的信息适用于 ActiveX 客户端的开发人员以及使用代码公开 ActiveX 对象的其他人。 它描述公开对象的用户应期望的行为。

要求

   
目标平台 Windows
标头 oaidl.h

另请参阅

IDispatch