dual 屬性
雙重屬性會識別介面,該介面會透過IDispatch公開屬性和方法,並直接透過 VTBL 公開。
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
-
uuid-number
-
指定介面的通用唯一識別碼
-
optional-attribute-list
-
指定零個或多個其他 MIDL 屬性的清單。
-
interface-name
-
將套用 雙重 屬性的介面名稱。
由雙重屬性識別的介面必須與自動化相容,並且衍生自IDispatch。 dispinterfaces 上不允許這個屬性。
雙重屬性會建立介面,該介面同時為IDispatch介面和元件物件模型, (COM) 介面。 雙重介面的 VTBL 前七個專案是 IDispatch的七個成員,其餘專案則用於直接存取雙重介面的成員。 針對雙重介面成員指定的所有參數和傳回型別都必須是自動化相容型別。
雙重介面的所有成員都必須傳遞 HRESULT 做為函式傳回值。 需要傳回其他值的屬性存取子函式等成員應該將最後一個參數指定為 out、 retval,指出傳回函式值的輸出參數。 此外,需要支援多個地區設定的成員應該傳遞 lcid 參數。
雙重介面提供直接 VTBL 系結的速度和 IDispatch 系結 的彈性。 因此,建議盡可能使用雙重介面。
注意
如果您的應用程式透過在介面呼叫中轉換 這個 指標來存取物件資料,您應該根據您自己的 VTBL 指標檢查物件中的 VTBL 指標,以確保您已連線到適當的 Proxy。
在介面上指定 雙重 表示介面與自動化相容,因此會同時設定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.
};