dual 属性
デュアル属性は、IDispatch を介して VTBL を介して直接プロパティとメソッドを公開するインターフェイスを識別します。
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
-
uuid-number
-
インターフェイスの汎用一意の識別番号を指定します
-
optional-attribute-list
-
0 個以上の追加の MIDL 属性のリストを指定します。
-
interface-name
-
デュアル属性が適用されるインターフェイスの名前。
デュアル属性によって識別されるインターフェイスは、Automation と互換性があり、IDispatch から派生する必要があります。 この属性は、ディスパッチインターフェイスでは使用できません。
デュアル属性は、IDispatch インターフェイスとコンポーネント オブジェクト モデル (COM) インターフェイスの両方であるインターフェイスを作成します。 デュアル インターフェイスの VTBL の最初の 7 つのエントリは IDispatch の 7 つのメンバーであり、残りのエントリはデュアル インターフェイスのメンバーに直接アクセスするためのエントリです。 デュアル インターフェイスのメンバーに対して指定されたすべてのパラメーターと戻り値の型は、オートメーション互換型である必要があります。
デュアル インターフェイスのすべてのメンバーは、関数の戻り値として HRESULT を渡す必要があります。 他の値を返す必要があるプロパティ アクセサー関数などのメンバーは、関数の値を返す出力パラメーターを示す最後のパラメーターを out、 retval として指定する必要があります。 さらに、複数のロケールをサポートする必要があるメンバーは 、lcid パラメーターを渡す必要があります。
デュアル インターフェイスは、直接 VTBL バインドの速度と IDispatch バインドの柔軟性の両方を提供します。 このため、可能な限りデュアル インターフェイスをお勧めします。
注意
アプリケーションがインターフェイス呼び出し内でこのポインターをキャストしてオブジェクト データにアクセスする場合は、オブジェクト内の VTBL ポインターを独自の VTBL ポインターに対してチェックして、適切なプロキシに接続していることを確認する必要があります。
インターフェイスで dual を指定すると、インターフェイスは Automation と互換性があるため、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.
};