Общие сведения о рекомендациях по управлению и управлению контейнерами
Элемент activeX по сути является простым объектом OLE, поддерживающим интерфейс IUnknown . Обычно он поддерживает дополнительные интерфейсы для предоставления функциональных возможностей, но все дополнительные интерфейсы могут рассматриваться как необязательные, и таким образом контейнер управления не должен полагаться на какие-либо дополнительные интерфейсы, поддерживаемые. Не указывая дополнительные интерфейсы, которые должен поддерживать элемент управления, элемент управления может эффективно ориентироваться на определенную область функциональных возможностей, не поддерживая определенные интерфейсы для определения элемента управления. Как и всегда с OLE, будь то в элементе управления или контейнере элементов управления, никогда не следует предполагать, что интерфейс доступен и стандартные соглашения о возврате проверка всегда следует следовать. Важно, чтобы контейнер элементов управления или управления удваительно ухудшал работу и предлагать альтернативные функциональные возможности, если интерфейс недоступен.
Контейнер элементов управления ActiveX должен иметь возможность размещения минимального элемента activeX; он также будет поддерживать ряд дополнительных интерфейсов, указанных в контейнерах. Существует ряд интерфейсов и методов, которые контейнер может поддерживать при необходимости, которые группируются в функциональные области, известные как категории компонентов. Контейнер может поддерживать любое сочетание категорий компонентов, например категорию компонентов для привязки данных, а контейнер может или не поддерживает функциональные возможности привязки данных в зависимости от потребностей на рынке контейнера. Если элемент управления нуждается в поддержке привязки данных из контейнера для работы, он введет это требование в реестр. Это позволяет контейнеру элементов управления предлагать только те элементы управления, которые он знает, что он может успешно размещать. Важно отметить, что категории компонентов указываются как часть OLE и не относятся к элементам ActiveX, архитектура элементов управления использует категории компонентов для определения областей функциональных возможностей, которые может поддерживать компонент OLE. Категории компонентов не являются накопительными или эксклюзивными, поэтому контейнер управления может поддерживать одну категорию без обязательной поддержки другой.
Для элементов управления, требующих дополнительных функций или функций, характерных для определенного контейнера, необходимо четко упаковать и провести рынок с этими требованиями. Аналогичным образом контейнеры, которые предлагают определенные функции или категории компонентов, должны быть рынок и упаковированы в качестве предложения этих уровней поддержки при размещении элементов ActiveX. Рекомендуется управлять целевым объектом и тестировать как можно больше контейнеров и ухудшать их, чтобы обеспечить менее или альтернативные функциональные возможности, если интерфейсы или методы недоступны. В ситуации, когда элемент управления не может выполнять назначенную функцию задания без поддержки категории компонентов, эту категорию следует ввести в качестве требования в реестре, чтобы предотвратить вставку элемента управления в недопустимый контейнер.
Эти рекомендации определяют эти интерфейсы и методы, которые элемент управления может ожидать поддержки контейнера элементов управления, хотя всегда элемент управления должен проверка возвращаемые значения при использовании QueryInterface или других методов для получения указателей на эти интерфейсы. Контейнер не должен ожидать, что элемент управления поддерживает что-либо больше, чем интерфейс IUnknown , и эти рекомендации определяют, какие интерфейсы могут поддерживать элемент управления и что означает наличие определенного интерфейса.
Почему важны рекомендации по управлению и контейнеру ActiveX
Элементы ActiveX стали основной архитектурой для разработки программируемых компонентов программного обеспечения для использования в различных контейнерах, начиная от средств разработки программного обеспечения до средств повышения производительности конечных пользователей. Чтобы элемент управления работал хорошо в различных контейнерах, элемент управления должен иметь возможность предполагать минимальный уровень функциональности, которую он может использовать во всех контейнерах.
Следуя этим рекомендациям, разработчики элементов управления и контейнеров делают свои элементы управления и контейнеры более надежными и совместимыми, а в конечном итоге лучше и удобнее использовать компоненты для создания решений на основе компонентов.
Что делать, если необходимый интерфейс недоступен
Программы OLE должны использовать QueryInterface для получения указателей интерфейса и должны проверка возвращаемое значение. Приложения OLE не могут безопасно предположить, что ЗапросInterface будет выполнен успешно.
Это требование применяется ко всем приложениям OLE. Если запрошенный интерфейс недоступен (т . е. QueryInterface возвращает E_NOINTERFACE), элемент управления или контейнер должен деградировать корректно, даже если это означает, что он не может выполнять назначенную функцию задания.
См. также