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


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

Создает упрощенные сведения о типе для использования в реализации IDispatch.

Синтаксис

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

Параметры

pidata

Описание интерфейса, описываемого данными этого типа.

lcid

Идентификатор языкового стандарта для имен, используемых в сведениях о типе.

pptinfo

При возврате указатель на реализацию сведений о типе для использования в DispGetIDsOfNames и DispInvoke.

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

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

Код возврата Описание
S_OK
Интерфейс поддерживается.
E_INVALIDARG
Недопустимое описание интерфейса или идентификатор LCID.
E_OUTOFMEMORY
Недостаточно памяти для завершения операции.

Комментарии

Сведения о типе можно создавать во время выполнения с помощью CreateDispTypeInfo и структуры INTERFACEDATA, описывающей предоставляемый объект.

Сведения о типе, возвращаемые этой функцией, в основном предназначены для автоматизации реализации IDispatch. CreateDispTypeInfo не возвращает все сведения о типе, описанные в разделе Интерфейсы описания типов. Аргумент pidata не является полным описанием интерфейса. Он не включает сведения справки, комментарии, необязательные параметры и другие сведения о типах, которые полезны в разных контекстах.

Соответственно, рекомендуемым способом предоставления сведений о типе объекта является описание объекта с помощью языка описания объектов (ODL) и компиляция описания объекта в библиотеку типов с помощью компилятора языка определения интерфейса Майкрософт (MIDL).

Чтобы использовать сведения о типе из библиотеки типов, используйте функции LoadTypeLib и GetTypeInfoOfGuid вместо CreateDispTypeInfo. Дополнительные сведения Об интерфейсах описания типов.

Примеры

Следующий код создает сведения о типе из INTERFACEDATA для предоставления объекта 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;
}

Требования

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

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

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

IDispatch