dispinterface 属性

dispinterface ステートメントは、IDispatch::Invoke を呼び出すことができるプロパティとメソッドのセットを定義します。 ディスパッチインターフェイスは、サポートされている一連のメソッドとプロパティ (構文 1) を明示的に一覧表示するか、単一のインターフェイス (構文 2) を一覧表示することによって定義できます。

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

パラメーター

attributes

ディスパッチインターフェイス全体に適用される属性を指定します。 [helpstring]、[helpcontext][helpfile]、[hidden][nonextensible][oleautomation][restricted][uuid]および [version] の各属性を使用できます。

dispinterface-name

タイプ ライブラリで dispinterface が認識される名前。 この名前はタイプ ライブラリ内で一意である必要があります。

property-list

(構文 1)変数の形式で宣言された、オブジェクトでサポートされるプロパティの省略可能なリスト。 これは、メソッドの一覧でプロパティ関数を宣言するための短い形式です。 詳細については、コメントセクションを参照してください。

method-list

(構文 1) dispinterface 内の各メソッドとプロパティの関数プロトタイプを構成するリスト。 任意の数の関数定義を メタリストに表示できます。 メタリストの関数の形式は次のとおりです。

[属性]returntype メタ名型 paramname(params);

dispinterface のメソッドでは、次の属性が受け入れられます: [helpstring][helpcontext][propget][propput][propputref][string]、および [vararg][vararg] を指定する場合、最後のパラメーターは VARIANT 型のセーフ配列である必要があります。

パラメーター リストはコンマ区切りのリストで、各要素の形式は次のとおりです。

[属性]

には、任意の宣言型または組み込み型、または任意の型へのポインターを指定できます。 パラメーターの属性は次のとおりです。

[in][out][省略可能][string]

interface-name

(構文 2)IDispatch インターフェイスとして宣言するインターフェイスの名前。

注釈

MIDL コンパイラは、次のパラメーター順序を受け入れます (左から右へ)。

  1. 必須パラメーター ([defaultvalue] 属性または [省略可能] 属性を持たないパラメーター)
  2. 省略可能なパラメーターと [defaultvalue] 属性の有無に関係なく、
  3. パラメーターと [省略可能] 属性を持ち、[defaultvalue] 属性を指定しない場合、
  4. [ lcid] パラメーター (存在する場合)
  5. [ retval] パラメーター

メソッド関数は、[entry] 属性が許可されないことを除き、モジュールのリファレンス ページで説明されているとおりに指定されます。 STDOLE32 に注意してください。TLB (STDOLE。16 ビット システムの TLB) をインポートする必要があります。 これは、ディスパッチインターフェイス が IDispatch から継承されるためです。

プロパティまたはメソッド の一覧でプロパティを宣言できます。 プロパティ リストでプロパティを宣言しても、プロパティがサポートするアクセスの種類 (つまり、get、put、または putref) は示されません。 put または putref をサポートしていないプロパティに [ readonly] 属性を指定します。 メソッドの一覧でプロパティ関数を宣言すると、1 つのプロパティの関数はすべて同じ識別子を持ちます。

最初の構文を使用して、プロパティ: およびメソッド: タグが必要です。 各メンバーには [ id] 属性も必要です。 次に例を示します。

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

インターフェイス メンバーとは異なり、dispinterface メンバーは、HRESULT エラー コードに加えて 、retval 属性を使用して値を返すことはできません。 IDispatch::Invoke は LCID を渡すので、[ lcid] 属性もディスパッチインターフェイスに対して同様に無効です。 ただし、これらの属性を使用するインターフェイスを再宣言することはできます。

2 番目の構文を使用すると、IDispatch をサポートし、ODL スクリプトで以前に宣言されたインターフェイスは、次のように IDispatch インターフェイスとして再宣言できます。

dispinterface helloPro 
{ 
    interface hello; 
};

前の例では、hello のすべてのメンバーと、hello が IDispatch をサポートするメンバーとして継承するすべてのメンバーを宣言しています。 この場合、HRESULT を返す [lcid] メンバーと [retval] メンバーで hello が宣言されている場合、MkTypLib は各 [lcid] パラメーターと HRESULT 戻り値の型を削除し、代わりに戻り値の型を [retval] パラメーターの型としてマークします。

Note

Mktyplib.exe ツールは廃止されています。 代わりに MIDL コンパイラを使用してください。

 

ディスパッチインターフェイスのプロパティとメソッドは、ディスパッチインターフェイスの VTBL の一部ではありません。 そのため、 CreateStdDispatchDispInvoke を使用して IDispatch::Invoke を実装することはできません。 dispinterface は、アプリケーションが Automation を介して既存の VTBL 以外の関数を公開する必要がある場合に使用されます。 これらのアプリケーションは、dispidMember パラメーターを調べて、対応する関数を直接呼び出すことによって、IDispatch::Invoke を実装できます。

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

関連項目

bindable

defaultbind

displaybind

helpcontext

helpfile

helpstring

隠さ れた

インチ

インターフェイス

TYPEFLAGS

ODL ファイルの構文

ODL ファイルの例

MIDL を使用したタイプ ライブラリの生成

オプション

nonextensible

propget

propput

propputref

oleautomation

制限

文字列

uuid

vararg

version