Compartir a través de


Función CreateStdDispatch (oleauto.h)

Crea una implementación estándar de la interfaz IDispatch a través de una sola llamada de función. Esto simplifica la exposición de objetos a través de Automation.

Sintaxis

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

Parámetros

punkOuter

Implementación de IUnknown del objeto.

pvThis

Objeto que se va a exponer.

ptinfo

Información de tipo que describe el objeto expuesto.

ppunkStdDisp

Privado desconocido para el objeto que implementa la llamada QueryInterface de la interfaz IDispatch . Este puntero es null si se produce un error en la función.

Valor devuelto

Esta función puede devolver uno de estos valores.

Código devuelto Descripción
S_OK
Correcto.
E_INVALIDARG
Uno de los tres primeros argumentos no es válido.
E_OUTOFMEMORY
No había memoria suficiente para completar la operación.

Comentarios

Puede usar CreateStdDispatch al crear un objeto en lugar de implementar las funciones miembro IDispatch para el objeto . Sin embargo, la implementación que crea CreateStdDispatch tiene estas limitaciones:

  • Solo admite un idioma nacional.
  • Solo admite códigos de excepción definidos por el envío devueltos desde Invoke.

LoadTypeLib, GetTypeInfoOfGuid y CreateStdDispatch componen el conjunto mínimo de funciones a las que debe llamar para exponer un objeto mediante una biblioteca de tipos. Para obtener más información sobre LoadTypeLib y GetTypeInfoOfGuid, vea Interfaces de descripción de tipos.

CreateDispTypeInfo y CreateStdDispatch conforman el conjunto mínimo de componentes de envío que debe llamar para exponer un objeto mediante la información de tipo proporcionada por la estructura INTERFACEDATA.

Ejemplos

El código siguiente implementa la interfaz IDispatch para la clase CCalc mediante 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;
}

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