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


Двойные интерфейсы: IAccessible и IDispatch

Разработчики серверов должны предоставить стандартный интерфейс COM IDispatch для доступных объектов. Интерфейс IDispatch позволяет клиентским приложениям, написанным на Microsoft Visual Basic и различных языках сценариев, использовать методы и свойства, предоставляемые IAccessible. Поскольку доступный объект предоставляет доступ к объекту косвенно через IDispatch::Invoke или напрямую с IAccessible, он имеет двойной интерфейс.

Когда клиенты C/C++ возвращают указатель интерфейса IDispatch, клиенты могут вызвать QueryInterface , чтобы попытаться преобразовать указатель интерфейса IDispatch в указатель интерфейса IAccess . Чтобы вызвать методы IAccess косвенно, клиенты C/C++ вызывают IDispatch::Invoke. Для повышения производительности вызовите методы IAccessible , чтобы использовать объект напрямую.

Список идентификаторов диспетчеризации (DISPID), которые IDispatch использует для идентификации методов и свойств IAccessible , см. в приложении C. IAccessible DISPIDs.

Примечание

В версии 2.0 и более поздних версиях Microsoft Active Accessibility серверы не должны полностью реализовывать методы IDispatch , но могут просто возвращать E_NOTIMPL после инициализации любых параметров out, как показано в следующем примере.

 

HRESULT STDMETHODCALLTYPE AccServer::GetTypeInfoCount(UINT* pctinfo)
{
    *pctinfo = 0;
    return E_NOTIMPL;
};