IDispatch::GetIDsOfNames メソッド (oaidl.h)
1 つのメンバーとオプションの引数名のセットを、対応する整数 DISPID のセットにマップします。これは、後続の Invoke 呼び出しで使用できます。 ディスパッチ関数 DispGetIDsOfNames は、 GetIDsOfNames の標準実装を提供します。
構文
HRESULT GetIDsOfNames(
[in] REFIID riid,
[in] LPOLESTR *rgszNames,
[in] UINT cNames,
[in] LCID lcid,
[out] DISPID *rgDispId
);
パラメーター
[in] riid
将来使用するために予約されています。 IID_NULL にする必要があります。
[in] rgszNames
マップする名前の配列。
[in] cNames
マッピングされる名前の数。
[in] lcid
名前を解釈するロケール コンテキスト。
[out] rgDispId
呼び出し元によって割り当てられた配列。各要素には、rgszNames 配列で渡された名前のいずれかに対応する識別子 (ID) が含まれています。 最初の要素は、メンバー名を表します。 後続の要素は、メンバーの各パラメーターを表します。
戻り値
このメソッドは、これらの値のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
正常終了しました。 |
|
メモリが不足しています。 |
|
指定された名前の 1 つ以上が不明です。 DISPID の返される配列には、不明な名前に対応する各エントリのDISPID_UNKNOWNが含まれています。 |
|
ロケール識別子 (LCID) が認識されませんでした。 |
注釈
IDispatch 実装では、任意の正の整数 ID 値を特定の名前に関連付けることができます。 既定値または Value プロパティに対して 0 が予約されています。–1 は不明な名前を示すために予約されています。その他の負の値は、他の目的のために定義されています。 たとえば、 GetIDsOfNames が呼び出され、実装が 1 つ以上の名前を認識しない場合、DISP_E_UNKNOWNNAMEを返し、 rgDispId 配列には不明な名前に対応するエントリのDISPID_UNKNOWNが含まれます。
メンバーおよびパラメーター DISPID は、オブジェクトの有効期間中は一定である必要があります。 これにより、クライアントは DISPID を 1 回取得し、後で使用するためにキャッシュできます。
GetIDsOfNames が複数の名前で呼び出されると、名 (rgszNames[0]) はメンバー名に対応し、それ以降の名前はメンバーのパラメーターの名前に対応します。
コンテキストに応じて、同じ名前が異なる DISPID にマップされる場合があります。 たとえば、名前が特定のインターフェイスのメンバー名として使用される場合は DISPID、異なるインターフェイスのメンバーとして異なる ID、パラメーターとして表示されるたびに異なるマッピングを持つ場合があります。
GetIDsOfNames は、 IDispatch クライアントが実行時に名前にバインドするときに使用されます。 代わりにコンパイル時にバインドするために、 IDispatch クライアントは、「 型記述インターフェイス」で説明されている型情報インターフェイスを使用して、名前を DISPID にマップできます。 これにより、クライアントはコンパイル時にメンバーにバインドでき、実行時に GetIDsOfNames を 呼び出すのを回避できます。 コンパイル時のバインドの説明については、「型の説明インターフェイス」を参照してください。
GetIDsOfNames の実装では、大文字と小文字は区別されません。 大文字と小文字を区別する名前マッピングを必要とするユーザーは、 GetIDsOfNames を呼び出すのではなく、型情報インターフェイスを使用して、名前を DISPID にマップする必要があります。
例
Lines サンプル ファイルの次のコードLines.cppは、CLine クラスの GetIDsOfNames メンバー関数を実装します。 ActiveX または OLE オブジェクトは、標準実装 DispGetIDsOfNames を使用します。 この実装では、 DispGetIdsOfNames を使用して入力引数を検証します。 セキュリティ リスクを最小限に抑えるために、入力引数のより堅牢な検証を実行するコードを含めます。
STDMETHODIMP
CLine::GetIDsOfNames(
REFIID riid,
OLECHAR ** rgszNames,
UINT cNames,
LCID lcid,
DISPID * rgDispId)
{
return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgDispId);
}
次のコードは、 GetIDsOfNames を 呼び出して CLineColor プロパティの DISPID を取得する ActiveX クライアントに表示される場合があります。
HRESULT hresult;
IDispatch * pdisp = (IDispatch *)NULL;
DISPID dispid;
OLECHAR * szMember = "color";
// Code that sets a pointer to the dispatch (pdisp) is omitted.
hresult = pdisp->GetIDsOfNames(
IID_NULL,
&szMember,
1, LOCALE_SYSTEM_DEFAULT,
&dispid);
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | oaidl.h |