Двойные интерфейсы: 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;
};