IDispatch:: GetIDsOfNames

Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]

Ordnet ein einzelnes Element und eine optionale Gruppe von Argumentnamen auf einen entsprechenden Satz von Integer DISPIDs, die bei nachfolgenden Aufrufen auf IDispatch:: Invoke verwendet werden kann. Der Dispatch-Funktion DispGetIDsOfNames stellt eine Standardimplementierung von GetIDsOfNames bereit.

HRESULT GetIDsOfNames(  
  REFIID  riid,                  
  OLECHAR FAR* FAR*  rgszNames,  
  unsigned int  cNames,          
  LCID   lcid,                   
  DISPID FAR*  rgDispId          
);

Parameter

  • riid
    Für die zukünftige Verwendung reserviert. IID_NULL muss sein.

  • rgszNames
    Übergebenen-Array von zuzuordnenden Namen.

  • cNames
    Anzahl der Namen zugeordnet werden.

  • LCID
    Der Gebietsschemakontext, in dem die Namen interpretiert werden soll.

  • rgDispId
    Vom Aufrufer zugeordnete Array enthält jedes Element einen Bezeichner (ID) für einen der Namen im Array RgszNames übergeben. Das erste Element stellt den Namen des Members dar. Die nachfolgenden Elemente darstellen aller Parameter des Members.

Rückgabewert

Der Rückgabewert vom zurückgegebenen HRESULT ist eine der folgenden:

Rückgabewert

Bedeutung

S_OK

Erfolg.

E_OUTOFMEMORY

Nicht genügend freier Arbeitsspeicher zur Verfügung.

DISP_E_UNKNOWNNAME

Eine oder mehrere Namen wurden nicht bekannt. Das zurückgegebene Array von DISPIDs enthält DISPID_UNKNOWN für jeden Eintrag, der einen unbekannten Namen entspricht.

DISP_E_UNKNOWNLCID

Der Gebietsschemabezeichner (LCID) wurde nicht erkannt.

Kommentare

IDispatch Implementierung kann alle positiven ID-Wert einen bestimmten Namen zuordnen. 0 (Null) ist für die Standard oder Werteigenschaft; reserviert.-1 ist einen unbekannten Name; an reserviertund andere negative Werte für andere Zwecke definiert werden. Beispielsweise wenn GetIDsOfNames aufgerufen wird, und die Implementierung erkennt nicht, eine oder mehrere Namen, wird DISP_E_UNKNOWNNAME zurückgegeben und Array RgDispId enthält DISPID_UNKNOWN für die Einträge, die den unbekannten Namen entsprechen.

Der Member und Parameter müssen DISPIDs für die Lebensdauer des Objekts konstant. Dies ermöglicht einem Client die DISPIDs einmal beziehen und diese zur späteren Verwendung zwischenspeichern.

Wenn GetIDsOfNames mit mehr als einem Namen aufgerufen wird, den Vornamen (RgszNames [0]) entspricht den Namen des Members, und nachfolgende Namen entsprechen den Namen des Mitglieds-Parameter.

Verschiedene DISPIDs je nach Kontext kann der gleiche Namen zuordnen. Einen Namen kann z. B. eine DISPID haben, wenn es als einen Elementnamen mit einer bestimmten Schnittstelle einer anderen ID als Mitglied einer anderen Schnittstelle verwendet wird und andere Zuordnung für jedes Mal, wenn es angezeigt, als Parameter wird.

GetIDsOfNames wird verwendet, wenn ein IDispatch-Client den Namen zur Laufzeit bindet. Um stattdessen zur Kompilierzeit zu binden, kann ein IDispatch Client Namen, DISPIDs ordnen Sie mithilfe der Schnittstellen mit Typinformationen im Typ Beschreibung Schnittstellen beschrieben. Dies ermöglicht einem Client an Mitglieder zur Kompilierzeit binden und Aufrufen von GetIDsOfNames zur Laufzeit zu vermeiden. Eine Beschreibung der Bindung zur Kompilierzeit finden Sie unter Typ Beschreibung Schnittstellen.

Die Implementierung von GetIDsOfNames ist Groß-/Kleinschreibung nicht beachtet. Benutzer, die Groß-/Kleinschreibung Namenszuordnung sollten Schnittstellen mit Typinformationen verwenden, um DISPIDs Namen zuordnen, anstatt GetIDsOfNames aufrufen.

Beispiele

Der folgende Code aus den Zeilen Beispiel Datei Lines.cpp implementiert GetIDsOfNames-Memberfunktion für die CLine-Klasse. Das ActiveX- oder OLE-Objekt verwendet die Standardimplementierung, DispGetIDsOfNames. Diese Implementierung beruht auf DispGetIdsOfNames Eingabeargumente überprüfen. Fügen Sie Code, die eine stabilere Validierung von den Eingabeargumenten durchführt, um Sicherheitsrisiken zu minimieren.

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

Der folgende Code kann in ein ActiveX-Client angezeigt, die GetIDsOfNames erhalten die DISPID der für CLine Farbeigenschaft aufruft.

HRESULT hresult;
IDispatch FAR* pdisp = (IDispatch FAR*)NULL;
DISPID dispid;
OLECHAR FAR* szMember = "color";

// Code that sets a pointer to the dispatch (pdisp) is omitted.

hresult = pdisp->GetIDsOfNames(
   IID_NULL,
   &szMember,
   1, LOCALE_SYSTEM_DEFAULT,
   &dispid);

Siehe auch

Referenz

CreateStdDispatch

DispGetIDsOfNames

ITypeInfo:: GetIDsOfNames

Konzepte

IDispatch-Schnittstelle