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 中的一个参数无法强制为指定的类型。 |
|
其中一个参数 ID 与 方法上的参数不对应。 在这种情况下, puArgErr 设置为包含错误的第一个参数。 |
|
无法强制一个或多个参数。 rgvarg 中类型不正确的第一个参数的索引在 puArgErr 中返回。 |
|
riid 中传递的接口标识符未IID_NULL。 |
|
正在调用的成员根据 LCID 解释字符串参数,并且无法识别 LCID。 如果不需要 LCID 来解释参数,则不应返回此错误 |
|
省略了必需的参数。 |
注解
通常,不应直接实现 Invoke 。 请改用调度接口创建函数 CreateStdDispatch 和 DispInvoke。 有关详细信息,请参阅 CreateStdDispatch、 DispInvoke、 创建 IDispatch 接口 和 公开 ActiveX 对象。
如果在调用成员之前需要执行某些特定于应用程序的处理,代码应执行必要的操作,然后调用 ITypeInfo::Invoke 来调用该成员。 ITypeInfo::Invoke 的行为与 Invoke 完全相同。 CreateStdDispatch 和 DispInvoke 创建的 Invoke 的标准实现遵循 ITypeInfo::Invoke。
在 ActiveX 客户端 中,Invoke 应用于获取和设置属性值,或调用 ActiveX 对象的方法。 dispIdMember 参数标识要调用的成员。 标识成员的 DISPID 由对象的实现者定义,可以使用对象的文档、 IDispatch::GetIDsOfNames 函数或 ITypeInfo 接口来确定。
将 IDispatch::Invoke () 与 DISPATCH_PROPERTYPUT 或 DISPATCH_PROPERTYPUTREF 一起使用时,必须使用以下内容专门初始化 DISPPARAMS 结构的 cNamedArgs 和 rgdispidNamedArgs 元素:
DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;
下面的信息适用于 ActiveX 客户端的开发人员以及使用代码公开 ActiveX 对象的其他人。 它描述了公开对象的用户应预期的行为。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | oaidl.h |