Método IDispatch::GetIDsOfNames (oaidl.h)
Mapeia um único membro e um conjunto opcional de nomes de argumento para um conjunto correspondente de DISPIDs inteiros, que podem ser usados em chamadas subsequentes para Invocar. A função de expedição DispGetIDsOfNames fornece uma implementação padrão de GetIDsOfNames.
Sintaxe
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. Deve ser IID_NULL.
[in] rgszNames
A matriz de nomes a ser mapeada.
[in] cNames
A contagem dos nomes a serem mapeados.
[in] lcid
O contexto de localidade no qual interpretar os nomes.
[out] rgDispId
Matriz alocada pelo chamador, cada elemento do qual contém um identificador (ID) correspondente a um dos nomes passados na matriz rgszNames. O primeiro elemento representa o nome do membro. Os elementos subsequentes representam cada um dos parâmetros do membro.
Retornar valor
Esse método pode retornar um desses valores.
Código de retorno | Descrição |
---|---|
|
Êxito. |
|
Sem memória. |
|
Um ou mais dos nomes especificados não eram conhecidos. A matriz retornada de DISPIDs contém DISPID_UNKNOWN para cada entrada que corresponde a um nome desconhecido. |
|
O LCID (identificador de localidade) não foi reconhecido. |
Comentários
Uma implementação de IDispatch pode associar qualquer valor de ID de inteiro positivo a um determinado nome. Zero é reservado para a propriedade padrão ou Value ; –1 é reservado para indicar um nome desconhecido; e outros valores negativos são definidos para outras finalidades. Por exemplo, se GetIDsOfNames for chamado e a implementação não reconhecer um ou mais nomes, ela retornará DISP_E_UNKNOWNNAME e a matriz rgDispId conterá DISPID_UNKNOWN para as entradas que correspondem aos nomes desconhecidos.
Os DISPIDs de membro e parâmetro devem permanecer constantes durante o tempo de vida do objeto. Isso permite que um cliente obtenha os DISPIDs uma vez e armazene-os em cache para uso posterior.
Quando GetIDsOfNames é chamado com mais de um nome, o nome (rgszNames[0]) corresponde ao nome do membro e os nomes subsequentes correspondem aos nomes dos parâmetros do membro.
O mesmo nome pode ser mapeado para DISPIDs diferentes, dependendo do contexto. Por exemplo, um nome pode ter um DISPID quando é usado como um nome de membro com uma interface específica, uma ID diferente como membro de uma interface diferente e mapeamento diferente para cada vez que ele aparece como um parâmetro.
GetIDsOfNames é usado quando um cliente IDispatch é associado a nomes em tempo de execução. Para associar em tempo de compilação, um cliente IDispatch pode mapear nomes para DISPIDs usando as interfaces de informações de tipo descritas em Interfaces de Descrição de Tipo. Isso permite que um cliente se associe aos membros em tempo de compilação e evite chamar GetIDsOfNames em tempo de execução. Para obter uma descrição da associação em tempo de compilação, consulte Interfaces de descrição de tipo.
A implementação de GetIDsOfNames não diferencia maiúsculas de minúsculas. Os usuários que precisam de mapeamento de nomes que diferenciam maiúsculas de minúsculas devem usar interfaces de informações de tipo para mapear nomes para DISPIDs, em vez de chamar GetIDsOfNames.
Exemplos
O código a seguir do arquivo de exemplo Lines Lines.cpp implementa a função membro GetIDsOfNames para a classe CLine. O objeto ActiveX ou OLE usa a implementação padrão DispGetIDsOfNames. Essa implementação depende de DispGetIdsOfNames para validar argumentos de entrada. Para ajudar a minimizar os riscos de segurança, inclua o código que executa uma validação mais robusta dos argumentos de entrada.
STDMETHODIMP
CLine::GetIDsOfNames(
REFIID riid,
OLECHAR ** rgszNames,
UINT cNames,
LCID lcid,
DISPID * rgDispId)
{
return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgDispId);
}
O código a seguir pode aparecer em um cliente ActiveX que chama GetIDsOfNames para obter o DISPID da propriedade 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 | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | oaidl.h |