Compartir a través de


Función CreateDispTypeInfo (oleauto.h)

Crea información de tipo simplificada para su uso en una implementación de IDispatch.

Sintaxis

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

Parámetros

pidata

Descripción de la interfaz que describe esta información de tipo.

lcid

Identificador de configuración regional de los nombres usados en la información de tipo.

pptinfo

Al devolver, puntero a una implementación de información de tipo para su uso en DispGetIDsOfNames y DispInvoke.

Valor devuelto

Esta función puede devolver uno de estos valores.

Código devuelto Descripción
S_OK
Se admite la interfaz .
E_INVALIDARG
La descripción de la interfaz o el LCID no son válidos.
E_OUTOFMEMORY
Memoria insuficiente para completar la operación.

Comentarios

Puede construir información de tipo en tiempo de ejecución mediante CreateDispTypeInfo y una estructura INTERFACEDATA que describe el objeto que se expone.

La información de tipo devuelta por esta función está diseñada principalmente para automatizar la implementación de IDispatch. CreateDispTypeInfo no devuelve toda la información de tipo descrita en Interfaces de descripción de tipos. El argumento pidata no es una descripción completa de una interfaz. No incluye información de Ayuda, comentarios, parámetros opcionales y otra información de tipo que resulta útil en contextos diferentes.

En consecuencia, el método recomendado para proporcionar información de tipo sobre un objeto es describir el objeto mediante el lenguaje de descripción de objetos (ODL) y compilar la descripción del objeto en una biblioteca de tipos mediante el compilador del lenguaje de definición de interfaz de Microsoft (MIDL).

Para usar la información de tipos de una biblioteca de tipos, use las funciones LoadTypeLib y GetTypeInfoOfGuid en lugar de CreateDispTypeInfo. Para obtener más información , escriba interfaces de descripción.

Ejemplos

El código siguiente crea información de tipo de INTERFACEDATA para exponer el 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 Value
Plataforma de destino Windows
Encabezado oleauto.h
Library OleAut32.lib
Archivo DLL OleAut32.dll

Consulte también

Creación de funciones de API de distribución

IDispatch