Funzione CreateDispTypeInfo (oleauto.h)

Crea informazioni sui tipi semplificate da usare in un'implementazione di IDispatch.

Sintassi

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

Parametri

pidata

Descrizione dell'interfaccia descritta da queste informazioni sul tipo.

lcid

Identificatore delle impostazioni locali per i nomi utilizzati nelle informazioni sul tipo.

pptinfo

In caso di restituzione, puntatore a un'implementazione delle informazioni sul tipo da usare in DispGetIDsOfNames e DispInvoke.

Valore restituito

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
L'interfaccia è supportata.
E_INVALIDARG
La descrizione dell'interfaccia o LCID non è valida.
E_OUTOFMEMORY
Memoria insufficiente per completare l'operazione.

Commenti

È possibile costruire informazioni sul tipo in fase di esecuzione usando CreateDispTypeInfo e una struttura INTERFACEDATA che descrive l'oggetto esposto.

Le informazioni sul tipo restituite da questa funzione sono progettate principalmente per automatizzare l'implementazione di IDispatch. CreateDispTypeInfo non restituisce tutte le informazioni sul tipo descritte in Interfacce di descrizione del tipo. L'argomento pidata non è una descrizione completa di un'interfaccia. Non include informazioni sulla Guida, commenti, parametri facoltativi e altre informazioni sul tipo utili in contesti diversi.

Di conseguenza, il metodo consigliato per fornire informazioni sul tipo su un oggetto consiste nel descrivere l'oggetto utilizzando il linguaggio ODL (Object Description Language) e compilare la descrizione dell'oggetto in una libreria dei tipi usando il compilatore MIDL (Microsoft Interface Definition Language).

Per usare le informazioni sui tipi di una libreria dei tipi, usare le funzioni LoadTypeLib e GetTypeInfoOfGuid anziché CreateDispTypeInfo. Per altre informazioni, vedere Interfacce di descrizione del tipo.

Esempio

Il codice che segue crea informazioni sul tipo da INTERFACEDATA per esporre l'oggetto 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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione oleauto.h
Libreria OleAut32.lib
DLL OleAut32.dll

Vedi anche

Creazione di Funzioni API Dispatch

Idispatch