IDispatch::GetIDsOfNames-Methode (oaidl.h)

Ordnet einem einzelnen Element und einer optionalen Gruppe von Argumentnamen einen entsprechenden Satz von ganzzahligen DISPIDs zu, die für nachfolgende Aufrufe verwendet werden können. Die Versandfunktion DispGetIDsOfNames stellt eine Standardimplementierung von GetIDsOfNames bereit.

Syntax

HRESULT GetIDsOfNames(
  [in]  REFIID   riid,
  [in]  LPOLESTR *rgszNames,
  [in]  UINT     cNames,
  [in]  LCID     lcid,
  [out] DISPID   *rgDispId
);

Parameter

[in] riid

Für zukünftige Verwendung reserviert. Muss IID_NULL sein.

[in] rgszNames

Das Array der Namen, die zugeordnet werden sollen.

[in] cNames

Die Anzahl der zuzuordnenden Namen.

[in] lcid

Der Gebietsschemakontext, in dem die Namen interpretiert werden sollen.

[out] rgDispId

Aufrufer zugewiesenes Array, jedes Element, das einen Bezeichner (ID) enthält, der einer der Namen entspricht, die im rgszNames-Array übergeben wurden. Das erste Element stellt den Membernamen dar. Die nachfolgenden Elemente stellen jede der Parameter des Elements dar.

Rückgabewert

Diese Methode kann einen dieser Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
E_OUTOFMEMORY
Nicht genügend Arbeitsspeicher.
DISP_E_UNKNOWNNAME
Eine oder mehrere der angegebenen Namen wurden nicht bekannt. Das zurückgegebene Array von DISPIDs enthält DISPID_UNKNOWN für jeden Eintrag, der einem unbekannten Namen entspricht.
DISP_E_UNKNOWNLCID
Der Gebietsschemabezeichner (LCID) wurde nicht erkannt.

Hinweise

Eine IDispatch-Implementierung kann jedem positiven ganzzahligen ID-Wert einen angegebenen Namen zuordnen. Null ist für die Standard- oder Value-Eigenschaft reserviert; –1 ist reserviert, um einen unbekannten Namen anzugeben; und andere negative Werte werden für andere Zwecke definiert. Wenn beispielsweise GetIDsOfNames aufgerufen wird, und die Implementierung erkennt keine oder mehrere namen, gibt sie DISP_E_UNKNOWNNAME zurück, und das rgDispId-Array enthält DISPID_UNKNOWN für die Einträge, die den unbekannten Namen entsprechen.

Das Element und der Parameter DISPIDs müssen für die Lebensdauer des Objekts konstant bleiben. Dadurch kann ein Client die DISPIDs einmal abrufen und sie später zwischenspeichern.

Wenn GetIDsOfNames mit mehreren Namen aufgerufen wird, entspricht der Vorname (rgszNames[0]) dem Membernamen, und die nachfolgenden Namen entsprechen den Namen der Parameter des Elements.

Der gleiche Name kann unterschiedlichen DISPIDs zugeordnet werden, je nach Kontext. Beispielsweise kann ein Name eine DISPID haben, wenn er als Membername mit einer bestimmten Schnittstelle, einer anderen ID als Mitglied einer anderen Schnittstelle und für jedes Mal als Parameter verwendet wird.

GetIDsOfNames wird verwendet, wenn ein IDispatch-Client zu Laufzeit an Namen gebunden wird. Zum Binden zur Kompilierung kann ein IDispatch-Client Namen mit DISPIDs zuordnen, indem die Typinformationsschnittstellen verwendet werden, die in Typbeschreibungsschnittstellen beschrieben sind. Dadurch kann ein Client zum Kompilieren an Mitglieder binden und das Aufrufen von GetIDsOfNames zur Laufzeit vermeiden. Eine Beschreibung der Bindung zur Kompilierung finden Sie unter "Typbeschreibungsschnittstellen".

Die Implementierung von GetIDsOfNames ist groß und klein. Benutzer, die eine Groß-/Kleinschreibungsnamenzuordnung benötigen, sollten Typinformationsschnittstellen verwenden, um Namen mit DISPIDs zuzuordnen, anstatt GetIDsOfNames aufzurufen.

Vorsicht Sie können diese Methode nicht verwenden, um auf Werte zuzugreifen, die dynamisch hinzugefügt wurden, z. B. Werte, die über JavaScript hinzugefügt wurden. Verwenden Sie stattdessen die GetDispID der IDispatchEx-Schnittstelle. Weitere Informationen finden Sie in der IDispatchEx-Schnittstelle.
 

Beispiele

Der folgende Code aus der Beispieldatei Lines.cpp implementiert die GetIDsOfNames-Memberfunktion für die CLine-Klasse. Das ActiveX- oder OLE-Objekt verwendet die Standardimplementierung DispGetIDsOfNames. Diese Implementierung basiert auf DispGetIdsOfNames , um Eingabeargumente zu überprüfen. Um Sicherheitsrisiken zu minimieren, schließen Sie Code ein, der eine robustere Überprüfung der Eingabeargumente ausführt.

STDMETHODIMP 
CLine::GetIDsOfNames(
      REFIID riid,
      OLECHAR ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgDispId)
{
      return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgDispId);
}

Der folgende Code wird möglicherweise in einem ActiveX-Client angezeigt, der GetIDsOfNames aufruft, um die DISPID der CLineColor-Eigenschaft abzurufen.

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);

Anforderungen

   
Zielplattform Windows
Kopfzeile oaidl.h

Weitere Informationen

CreateStdDispatch

DispGetIDsOfNames

IDispatch