Поделиться через


Функция CreateStdDispatch (oleauto.h)

Создает стандартную реализацию интерфейса IDispatch с помощью одного вызова функции. Это упрощает предоставление объектов с помощью автоматизации.

Синтаксис

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

Параметры

punkOuter

Реализация объекта IUnknown .

pvThis

Объект для предоставления.

ptinfo

Сведения о типе, описывающие предоставленный объект.

ppunkStdDisp

Частная неизвестная для объекта, реализующего вызов QueryInterface интерфейса IDispatch . Этот указатель имеет значение NULL, если функция завершается сбоем.

Возвращаемое значение

Эта функция может возвращать одно из этих значений.

Код возврата Описание
S_OK
Успешно.
E_INVALIDARG
Один из первых трех аргументов недопустим.
E_OUTOFMEMORY
Недостаточно памяти для завершения операции.

Комментарии

CreateStdDispatch можно использовать при создании объекта вместо реализации функций-членов IDispatch для объекта . Однако реализация, которую создает CreateStdDispatch , имеет следующие ограничения:

  • Поддерживает только один национальный язык.
  • Поддерживает только коды исключений, определяемые диспетчером, возвращаемые командой Invoke.

LoadTypeLib, GetTypeInfoOfGuid и CreateStdDispatch составляют минимальный набор функций, которые необходимо вызвать для предоставления объекта с помощью библиотеки типов. Дополнительные сведения о LoadTypeLib и GetTypeInfoOfGuid см. в разделе Интерфейсы описания типов.

CreateDispTypeInfo и CreateStdDispatch составляют минимальный набор компонентов диспетчеризации, которые необходимо вызвать для предоставления объекта с использованием сведений о типе, предоставляемых структурой INTERFACEDATA.

Примеры

Следующий код реализует интерфейс IDispatch для класса CCalc с помощью 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;
}

Требования

Требование Значение
Целевая платформа Windows
Header oleauto.h
Библиотека OleAut32.lib
DLL OleAut32.dll

См. также раздел

Создание функций API диспетчеризации

IDispatch