次の方法で共有


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