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) が含まれています。 最初の要素は、メンバー名を表します。 後続の要素は、メンバーの各パラメーターを表します。

戻り値

このメソッドは、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
正常終了しました。
E_OUTOFMEMORY
メモリが不足しています。
DISP_E_UNKNOWNNAME
指定された名前の 1 つ以上が不明です。 DISPID の返される配列には、不明な名前に対応する各エントリのDISPID_UNKNOWNが含まれています。
DISP_E_UNKNOWNLCID
ロケール識別子 (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 にマップする必要があります。

注意 このメソッドを使用して、JavaScript で追加された値など、動的に追加された値にアクセスすることはできません。 代わりに、IDispatchEx インターフェイスの GetDispID を使用します。 詳細については、 IDispatchEx インターフェイスを参照してください。
 

例

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

こちらもご覧ください

CreateStdDispatch

DispGetIDsOfNames

IDispatch