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方法具有具有 「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*/
}