dual 特性

属性标识一个接口,该接口通过 IDispatch 公开属性和方法,并直接通过 VTBL 公开属性和方法。

[
    uuid(uuid-number), 
    oleautomation,
    dual 
  [ , optional-attribute-list]
]
interface interface-name
{
    . . .
};

参数

uuid-number

指定接口的通用唯一标识号

optional-attribute-list

指定零个或多个其他 MIDL 属性的列表。

interface-name

将应用 属性的接口的名称。

注解

由双属性标识的接口必须与自动化兼容,并且派生自 IDispatch。 不允许在 dispinterface 上使用此属性。

属性创建一个接口,该接口既是 IDispatch 接口,也是组件对象模型 (COM) 接口。 双接口 VTBL 的前七个条目是 IDispatch 的七个成员,其余条目用于直接访问双接口的成员。 为双接口成员指定的所有参数和返回类型必须是自动化兼容的类型。

双接口的所有成员都必须将 HRESULT 作为函数返回值传递。 需要返回其他值的属性访问器函数等成员应将最后一个参数指定为 outretval,指示返回函数值的输出参数。 此外,需要支持多个区域设置的成员应传递 lcid 参数。

双接口提供直接 VTBL 绑定的速度和 IDispatch 绑定的灵活性。 因此,建议尽可能使用双接口。

注意

如果应用程序通过在接口调用中强制转换 指针来访问对象数据,则应根据自己的 VTBL 指针检查对象中的 VTBL 指针,以确保已连接到相应的代理。

 

在接口上指定 通道意味着接口与自动化兼容,因此会同时设置TYPEFLAG_FDUAL和TYPEFLAG_FOLEAUTOMATION标志。

Flags

TYPEFLAG_FDUAL、TYPEFLAG_FOLEAUTOMATION

示例

[
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    oleautomation, dual
]
interface IHello : IDispatch
{
    //Diverse properties and methods defined here.
};

另请参阅

使用 MIDL 生成类型库

接口

Lcid

oleautomation

ODL 文件语法

ODL 文件示例

out

retval