Двойные интерфейсы: IAccessible и IDispatch
Разработчики серверов должны предоставить стандартный интерфейс объектной модели компонентов (COM) IDispatch для своих доступных объектов. Интерфейс IDispatch позволяет клиентским приложениям, написанным на Microsoft Visual Basic, и различным языкам сценариев использовать методы и свойства, предоставляемые I Access. Так как доступный объект предоставляет доступ к объекту либо косвенно через IDispatch::Invoke, либо напрямую с I Access, он, как говорят, имеет двойной интерфейс.
Когда клиенты C/C++ возвращают указатель интерфейса IDispatch, клиенты могут вызывать QueryInterface, чтобы попытаться преобразовать указатель интерфейса IDispatch в указатель интерфейса IDispatch на указатель интерфейса IDispatch на указатель интерфейса IAccess. Чтобы вызвать методы IAccess косвенно, клиенты C/C++ вызывают IDispatch::Invoke. Чтобы повысить производительность, вызовите методы IAccessible напрямую для использования объекта.
Список идентификаторов и идентификаторов отправки (DISPID), которые IDispatch используются для идентификации методов и свойств недоступности, см. в приложении C: IAccessible DISPIDs.
Заметка
В версии 2.0 и более поздних версий Microsoft Active Accessibility серверы не должны полностью реализовать методы IDispatch, но могут просто вернуть E_NOTIMPL после инициализации всех параметров, как показано в следующем примере.
HRESULT STDMETHODCALLTYPE AccServer::GetTypeInfoCount(UINT* pctinfo)
{
*pctinfo = 0;
return E_NOTIMPL;
};