Позволяет создать стандартную реализацию IDispatch одним вызовом функции.
HRESULT CreateStdDispatch ( IUnknown FAR* punkOuter, void FAR*pvThis, ITypelnfo FAR*ptinfo, IUnknown FAR* FAR* ppunkStdDisp );
Параметры:
Коды возврата:
Из возвращенного HRESULT получают один из следующих кодов возврата:
Код возврата | Значение |
---|---|
S_OK | Успех. |
E_INVALIDARG | Один из первых трех параметров неверен. |
E_OUTOFMEMORY | He хватает памяти для выполнения операции. |
Комментарии:
При создании объекта вместо того, чтобы реализовывать для него функции-члены IDispatch, Вы можете прибегнуть к CreateStdDispatch. Однако создаваемая этой функцией реализация имеет следующие ограничения:
Пример:
Следующий фрагмент кода реализует интерфейс IDispatch для класса CCalc с помощью CreateStdDispatch.
CCalc FAR* CCalc::Create() { HRESULT hresult; CCalc FAR* pcalc; CArith FAR* parith; ITypelnfo FAR* ptinfo; IUnknown FAR* punkStdDisp; extern INTERFACEDATA NEARDATA g_idataCCalc; if ((pcalc = new FAR CCalc()) == NULL) return NULL; pcalc->AddRef(); parith = &(pcalc->m_arith); // Построить информацию о типе для функциональности объекта, к которой // предоставляется программный доступ извне. hresult = CreateDispTypeInfo(&g_idataCCalc, LOCALE_SYSTEM_DEFAULT, &ptinfo); if(hresult != NOERROR) goto LErrorO; // Создать агрегат с экземпляром стандартной реализации // IDispatch, инициализированной нашей информацией о типе. hresult = CreateStdDispatch(pcalc, // Управляющий IUnknown. parith, // Экземпляр для распределения вызовов. ptinfo, // Информация о типе, описывающая экземпляр. &punkStdDisp); ptinfo->Release(); if(hresult != NOERROR) goto LErrorO; pcalc->m_punkStdDisp = punkStdDisp; return pcalc; LErrorO:; pcalc->Release(); return NULL; };