Funzione CreateStdDispatch (oleauto.h)

Crea un'implementazione standard dell'interfaccia IDispatch tramite una singola chiamata di funzione. Ciò semplifica l'esposizione di oggetti tramite Automazione.

Sintassi

HRESULT CreateStdDispatch(
  IUnknown  *punkOuter,
  void      *pvThis,
  ITypeInfo *ptinfo,
  IUnknown  **ppunkStdDisp
);

Parametri

punkOuter

Implementazione IUnknown dell'oggetto.

pvThis

Oggetto da esporre.

ptinfo

Informazioni sul tipo che descrivono l'oggetto esposto.

ppunkStdDisp

Oggetto sconosciuto privato per l'oggetto che implementa la chiamata QueryInterface dell'interfaccia IDispatch . Questo puntatore è Null se la funzione ha esito negativo.

Valore restituito

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Operazione completata.
E_INVALIDARG
Uno dei primi tre argomenti non è valido.
E_OUTOFMEMORY
Memoria insufficiente per completare l'operazione.

Commenti

È possibile usare CreateStdDispatch quando si crea un oggetto anziché implementare le funzioni membro IDispatch per l'oggetto. Tuttavia, l'implementazione creata da CreateStdDispatch presenta queste limitazioni:

  • Supporta una sola lingua nazionale.
  • Supporta solo i codici di eccezione definiti dalla distribuzione restituiti da Invoke.

LoadTypeLib, GetTypeInfoOfGuid e CreateStdDispatch costituiscono il set minimo di funzioni che è necessario chiamare per esporre un oggetto usando una libreria dei tipi. Per altre informazioni su LoadTypeLib e GetTypeInfoOfGuid, vedere Interfacce di descrizione dei tipi.

CreateDispTypeInfo e CreateStdDispatch costituiscono il set minimo di componenti dispatch che è necessario chiamare per esporre un oggetto usando le informazioni sul tipo fornite dalla struttura INTERFACEDATA.

Esempio

Il codice seguente implementa l'interfaccia IDispatch per la classe CCalc usando CreateStdDispatch.

CCalc FAR*
CCalc::Create()
{
   HRESULT hresult;
   CCalc * pcalc;
   CArith * parith;
   ITypeInfo* ptinfo;
   IUnknown * punkStdDisp;
extern INTERFACEDATA NEARDATA g_idataCCalc;

   if((pcalc = new FAR 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