Método IDispatch::GetIDsOfNames (oaidl.h)
Asigna un único miembro y un conjunto opcional de nombres de argumentos a un conjunto correspondiente de DISPID de enteros, que se pueden usar en llamadas posteriores a Invoke. La función dispatch DispGetIDsOfNames proporciona una implementación estándar de GetIDsOfNames.
Sintaxis
HRESULT GetIDsOfNames(
[in] REFIID riid,
[in] LPOLESTR *rgszNames,
[in] UINT cNames,
[in] LCID lcid,
[out] DISPID *rgDispId
);
Parámetros
[in] riid
Reservado para uso futuro. Debe ser IID_NULL.
[in] rgszNames
Matriz de nombres que se va a asignar.
[in] cNames
Número de nombres que se van a asignar.
[in] lcid
Contexto de configuración regional en el que se van a interpretar los nombres.
[out] rgDispId
Matriz asignada por el autor de la llamada, cada elemento del que contiene un identificador (ID) correspondiente a uno de los nombres pasados en la matriz rgszNames. El primer elemento representa el nombre del miembro. Los elementos siguientes representan cada uno de los parámetros del miembro.
Valor devuelto
Este método puede devolver uno de estos valores.
Código devuelto | Descripción |
---|---|
|
Correcto. |
|
Memoria insuficiente |
|
No se conocían uno o varios de los nombres especificados. La matriz de DISPID devuelta contiene DISPID_UNKNOWN para cada entrada que corresponde a un nombre desconocido. |
|
No se reconoció el identificador de configuración regional (LCID). |
Comentarios
Una implementación de IDispatch puede asociar cualquier valor de identificador entero positivo con un nombre determinado. Cero está reservado para la propiedad default o Value ; –1 está reservado para indicar un nombre desconocido; y otros valores negativos se definen para otros fines. Por ejemplo, si se llama a GetIDsOfNames y la implementación no reconoce uno o varios de los nombres, devuelve DISP_E_UNKNOWNNAME y la matriz rgDispId contiene DISPID_UNKNOWN para las entradas que corresponden a los nombres desconocidos.
Los DISPID del miembro y del parámetro deben permanecer constantes durante la vigencia del objeto. Esto permite a un cliente obtener los DISPID una vez y almacenarlos en caché para su uso posterior.
Cuando se llama a GetIDsOfNames con más de un nombre, el nombre (rgszNames[0]) corresponde al nombre de miembro y los nombres posteriores corresponden a los nombres de los parámetros del miembro.
El mismo nombre puede asignarse a diferentes DISPID, dependiendo del contexto. Por ejemplo, un nombre puede tener un DISPID cuando se usa como nombre de miembro con una interfaz determinada, un identificador diferente como miembro de una interfaz diferente y una asignación diferente para cada vez que aparece como parámetro.
GetIDsOfNames se usa cuando un cliente IDispatch se enlaza a nombres en tiempo de ejecución. Para enlazar en tiempo de compilación en su lugar, un cliente IDispatch puede asignar nombres a DISPID mediante las interfaces de información de tipo descritas en Interfaces de descripción de tipo. Esto permite que un cliente se enlace a miembros en tiempo de compilación y evite llamar a GetIDsOfNames en tiempo de ejecución. Para obtener una descripción del enlace en tiempo de compilación, consulte Interfaces de descripción de tipos.
La implementación de GetIDsOfNames no distingue mayúsculas de minúsculas. Los usuarios que necesitan la asignación de nombres que distinguen mayúsculas de minúsculas deben usar interfaces de información de tipo para asignar nombres a DISPID, en lugar de llamar a GetIDsOfNames.
Ejemplos
El código siguiente del archivo de ejemplo Lines Lines.cpp implementa la función miembro GetIDsOfNames para la clase CLine. El objeto ActiveX o OLE usa la implementación estándar DispGetIDsOfNames. Esta implementación se basa en DispGetIdsOfNames para validar los argumentos de entrada. Para ayudar a minimizar los riesgos de seguridad, incluya código que realice una validación más sólida de los argumentos de entrada.
STDMETHODIMP
CLine::GetIDsOfNames(
REFIID riid,
OLECHAR ** rgszNames,
UINT cNames,
LCID lcid,
DISPID * rgDispId)
{
return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgDispId);
}
El código siguiente puede aparecer en un cliente ActiveX que llama a GetIDsOfNames para obtener el DISPID de la propiedad CLineColor .
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);
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | oaidl.h |