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


Multiple Dual Interfaces

Можно сочетать преимущества повторяющегося интерфейса (то есть гибкости в таблице vtable и позднее связывание, таким образом, делая доступными класса в скриптовым языкам, а также C++) с методами множественного наследования.

Хотя можно предоставить несколько сдвоенные интерфейсы для одного com-объекта, не рекомендуется. Если несколько сдвоенные интерфейсы, он должен содержать только один IDispatch предоставленный интерфейс. Доступные методы убедиться, что этот случай содержат потерь, как потеря функции или повышением сложности кода. Разработчик должен тщательно проверить этот подход весить преимущества и недостатки.

Предоставить отдельный интерфейс IDispatch

Можно предоставить несколько сдвоенные интерфейсы для одного объекта путем наследования из двух или более IDispatchImpl специализаций. Однако если разрешить клиентам запросу для интерфейса IDispatch, потребуется использовать макрос COM_INTERFACE_ENTRY2 (или COM_INTERFACE_ENTRY_IID) для определения того, какой базовый класс, используемый для реализации IDispatch.

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

Поскольку только один интерфейс IDispatch предоставлять клиенты, которые могут только получать доступ к объектам через интерфейс IDispatch не смогут получить доступ методы или свойства в любом другом взаимодействие.

Объединение нескольких сдвоенных интерфейсов в одну реализацию интерфейса IDispatch

Библиотеки ATL не обеспечивает никакой поддержки для объединения нескольких сдвоенных интерфейсов в одну реализацию IDispatch. Однако существует несколько способов объединения вручную известных интерфейсов, как создать шаблонный класс, содержащий объединение отдельных интерфейсов IDispatch, создать новый объект для выполнения функции QueryInterface или помощью typeinfo- на основе реализации вложенных объектов, чтобы создать интерфейс IDispatch.

Эти подходы имеют проблемы с потенциальными конфликтами пространства имен, а также кодируют сложность и удобство сопровождения созданного. Не рекомендуется создать несколько сдвоенные интерфейсы.

См. также

Основные понятия

Dual Interfaces and ATL