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 作为函数返回值。 需要返回其他值的成员(如属性访问函数)应将最后一个参数指定为 out, retval,指示返回函数值的输出参数。 此外,需要支持多个区域设置的成员应传递 lcid 参数。
双接口提供直接 VTBL 绑定的速度和 IDispatch 绑定的灵活性。 因此,建议尽可能使用双接口。
备注
如果应用程序通过在接口调用中强制转换此指针来访问对象数据,则应针对自己的 VTBL 指针检查对象中的 VTBL 指针,以确保连接到相应的代理。
在接口上指定 dual 意味着接口与自动化兼容,因此会导致设置TYPEFLAG_FDUAL和TYPEFLAG_FOLEAUTOMATION标志。
TYPEFLAG_FDUAL,TYPEFLAG_FOLEAUTOMATION
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};