Функция CreateDispTypeInfo (oleauto.h)
Создает упрощенные сведения о типе для использования в реализации IDispatch.
Синтаксис
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
Параметры
pidata
Описание интерфейса, описываемого данными этого типа.
lcid
Идентификатор языкового стандарта для имен, используемых в сведениях о типе.
pptinfo
При возврате указатель на реализацию сведений о типе для использования в DispGetIDsOfNames и DispInvoke.
Возвращаемое значение
Эта функция может возвращать одно из этих значений.
Код возврата | Описание |
---|---|
|
Интерфейс поддерживается. |
|
Недопустимое описание интерфейса или идентификатор LCID. |
|
Недостаточно памяти для завершения операции. |
Комментарии
Сведения о типе можно создавать во время выполнения с помощью 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 |