Compartilhar via


Função CreateDispTypeInfo (oleauto.h)

Cria informações de tipo simplificadas para uso em uma implementação de IDispatch.

Sintaxe

HRESULT CreateDispTypeInfo(
  INTERFACEDATA *pidata,
  LCID          lcid,
  ITypeInfo     **pptinfo
);

Parâmetros

pidata

A descrição da interface que essas informações de tipo descrevem.

lcid

O identificador de localidade para os nomes usados nas informações de tipo.

pptinfo

No retorno, ponteiro para uma implementação de informações de tipo para uso em DispGetIDsOfNames e DispInvoke.

Retornar valor

Essa função pode retornar um desses valores.

Código de retorno Descrição
S_OK
Há suporte para a interface .
E_INVALIDARG
A descrição da interface ou a LCID não é válida.
E_OUTOFMEMORY
Memória insuficiente para concluir a operação.

Comentários

Você pode construir informações de tipo em tempo de execução usando CreateDispTypeInfo e uma estrutura INTERFACEDATA que descreve o objeto que está sendo exposto.

As informações de tipo retornadas por essa função foram projetadas principalmente para automatizar a implementação de IDispatch. CreateDispTypeInfo não retorna todas as informações de tipo descritas em Interfaces de Descrição de Tipo. O argumento pidata não é uma descrição completa de uma interface. Ele não inclui informações de Ajuda, comentários, parâmetros opcionais e outras informações de tipo que são úteis em contextos diferentes.

Assim, o método recomendado para fornecer informações de tipo sobre um objeto é descrever o objeto usando a Linguagem de Descrição do Objeto (ODL) e compilar a descrição do objeto em uma biblioteca de tipos usando o compilador MIDL (Linguagem de Definição de Interface da Microsoft).

Para usar informações de tipo de uma biblioteca de tipos, use as funções LoadTypeLib e GetTypeInfoOfGuid em vez de CreateDispTypeInfo. Para obter mais informações , digite interfaces de descrição.

Exemplos

O código a seguir cria informações de tipo de INTERFACEDATA para expor o objeto CCalc.

static METHODDATA NEARDATA rgmdataCCalc[] =
{
      PROPERTY(VALUE,  IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4),
      PROPERTY(ACCUM,  IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4),
      PROPERTY(OPND,   IMETH_OPERAND,  IDMEMBER_OPERAND,  VT_I4),
      PROPERTY(OP,     IMETH_OPERATOR, IDMEMBER_OPERATOR, VT_I2),
      METHOD0(EVAL,    IMETH_EVAL,     IDMEMBER_EVAL,     VT_BOOL),
      METHOD0(CLEAR,   IMETH_CLEAR,    IDMEMBER_CLEAR,    VT_EMPTY),
      METHOD0(DISPLAY, IMETH_DISPLAY,  IDMEMBER_DISPLAY,  VT_EMPTY),
      METHOD0(QUIT,    IMETH_QUIT,     IDMEMBER_QUIT,     VT_EMPTY),
      METHOD1(BUTTON,  IMETH_BUTTON,   IDMEMBER_BUTTON,   VT_BOOL),
};

INTERFACEDATA NEARDATA g_idataCCalc =
{
   rgmdataCCalc, DIM(rgmdataCCalc)
};

// Use Dispatch interface API functions to implement IDispatch.
CCalc *
CCalc::Create()
{
   HRESULT hresult;
   CCalc * pcalc;
   CArith * parith;
   ITypeInfo * ptinfo;
   IUnknown * punkStdDisp;
   extern INTERFACEDATA NEARDATA g_idataCCalc;

   if((pcalc = new CCalc()) == NULL)
      return NULL;
   pcalc->AddRef();

   parith = &(pcalc->m_arith);

   // Build type information for the functionality on this object that
   // is being exposed for external programmability.
   hresult = CreateDispTypeInfo(
      &g_idataCCalc, LOCALE_SYSTEM_DEFAULT, &ptinfo);
   if(hresult != NOERROR)
      goto LError0;

   // Create an aggregate with an instance of the default
   // implementation of IDispatch that is initialized with 
   // type information.
   hresult = CreateStdDispatch(
      pcalc,            // Controlling unknown.
      parith,            // Instance to dispatch on.
      ptinfo,            // Type information describing the instance.
      &punkStdDisp);

   ptinfo->Release();

   if(hresult != NOERROR)
      goto LError0;

   pcalc->m_punkStdDisp = punkStdDisp;

   return pcalc;

LError0:;
   pcalc->Release();
   return NULL;
}

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho oleauto.h
Biblioteca OleAut32.lib
DLL OleAut32.dll

Confira também

Criação de funções de API de expedição

IDispatch