async_uuid 特性
[async_uuid] 接口属性指示 MIDL 编译器定义 COM 接口的同步版本和异步版本。
[
object,
uuid(string-uuid1),
async_uuid(string-uuid2)[ [, interface-attribute-list]
]
interface interface-name : base-interface
{
interface-definition
}
-
string-uuid1
-
UUID 字符串,由 Uuidgen 实用工具生成,用于标识接口的同步版本。
-
string-uuid2
-
UUID 字符串,由 Uuidgen 实用工具生成,用于标识接口的异步版本。
-
interface-attribute-list
-
应用于接口作为一个整体的其他属性。 不能在 COM 接口中使用 [version] 属性。
-
interface-name
-
接口的名称。
-
base-interface
-
从中派生此接口的接口。 基接口必须是 IUnknown 或直接或间接派生自 IUnknown 的异步接口。
-
interface-definition
-
指定构成接口定义的 IDL 语句。
使用此属性需要 Windows 2000 或更高版本的 Windows。
将 [async_uuid] 属性应用于 COM 接口 (即) 具有 [object] 属性的接口时,MIDL 编译器除了传统同步版本外,还会生成接口的异步定义。 异步接口的名称与同步接口相同,但带有“Async”前缀。 IID) (接口标识符将是指定为 [async_uuid] 属性的参数的 UUID。
对于异步接口,MIDL 将每个方法拆分为单独的 begin 和 finish 方法。 begin 方法的同步方法名称带有“Begin_”前缀,并包含同步方法中的所有 [in] 参数。 finish 方法具有具有“Finish_”前缀的同步方法名称,并包含同步方法中的所有 [out] 参数。 如果同步方法具有任何 [in, out] 参数,则它们将同时包含在 begin 和 finish 异步方法中。
如果异步接口方法具有 [call_as] 属性,则 MIDL 将为 begin 和 finish 方法生成声明。 必须实现这两种方法。
每个异步接口都是同步接口上的修饰符,因此没有单独的继承图。 这意味着不能从异步接口 (IUnknown) 定义同步接口。 同步接口也不能从异步接口继承。 如果尝试其中一个,MIDL 编译器将发出错误消息。
[
object,
uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
async_uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
pointer_default(unique)
]
interface IMyInterface : IUnknown
{
/* Interface definition goes here*/
}