Información general sobre las directrices de los contenedores de control y control

Un control ActiveX es básicamente un objeto OLE simple que admite la interfaz IUnknown . Normalmente admitirá más interfaces con el fin de ofrecer funcionalidad, pero todas las interfaces adicionales se pueden ver como opcionales y, como tal, un contenedor de controles no debe depender de ninguna interfaz adicional que se admita. Al no especificar interfaces adicionales que un control debe admitir, un control puede dirigirse eficazmente a un área determinada de funcionalidad sin tener que admitir interfaces concretas para calificar como un control. Como siempre con OLE, ya sea en un control o en un contenedor de controles, nunca se debe suponer que una interfaz está disponible y siempre se deben seguir las convenciones estándar de comprobación de retorno. Es importante que un contenedor de control o control se degrada correctamente y ofrezca funcionalidad alternativa si no hay disponible una interfaz necesaria.

Un contenedor de controles ActiveX debe ser capaz de hospedar un control ActiveX mínimo; también admitirá una serie de interfaces adicionales, tal como se especifica en Contenedores. Hay varias interfaces y métodos que un contenedor puede admitir opcionalmente, que se agrupan en áreas funcionales conocidas como categorías de componentes. Un contenedor puede admitir cualquier combinación de categorías de componentes, por ejemplo, existe una categoría de componente para el enlace de datos y un contenedor puede o no admitir la funcionalidad de enlace de datos, en función de las necesidades de mercado del contenedor. Si un control necesita compatibilidad con el enlace de datos de un contenedor a una función, escribirá este requisito en el Registro. Esto permite que un contenedor de control solo ofrezca para la inserción de los controles que sabe que puede hospedar correctamente. Es importante tener en cuenta que las categorías de componentes se especifican como parte de OLE y no son específicas de los controles ActiveX, la arquitectura de controles usa categorías de componentes para identificar áreas de funcionalidad que un componente OLE puede admitir. Las categorías de componentes no son acumulativas o exclusivas, por lo que un contenedor de control puede admitir una categoría sin admitir necesariamente otra.

Es importante para los controles que requieren características opcionales o características específicas de un contenedor determinado para empaquetarse y comercializarse claramente con esos requisitos. De forma similar, los contenedores que ofrecen determinadas características o categorías de componentes deben comercializarse y empaquetarse como ofrecer esos niveles de compatibilidad al hospedar controles ActiveX. Se recomienda que los controles tengan como destino y prueben con tantos contenedores como sea posible y se degradan correctamente para ofrecer menos o funcionalidad alternativa si las interfaces o los métodos no están disponibles. En una situación en la que un control no puede realizar su función de trabajo designada sin la compatibilidad de una categoría de componente, esa categoría debe especificarse como requisito en el Registro para evitar que el control se inserte en un contenedor inadecuado.

Estas directrices definen esas interfaces y métodos que un control puede esperar que un contenedor de controles admita, aunque como siempre un control debe comprobar los valores devueltos al usar QueryInterface u otros métodos para obtener punteros a estas interfaces. Un contenedor no debe esperar que un control admita nada más que la interfaz IUnknown y estas directrices identifican qué interfaces puede admitir un control y cuál significa la presencia de una interfaz determinada.

¿Por qué son importantes las directrices del contenedor de controles y controles ActiveX?

Los controles ActiveX se han convertido en la arquitectura principal para desarrollar componentes de software programables para su uso en una variedad de contenedores diferentes, desde herramientas de desarrollo de software hasta herramientas de productividad del usuario final. Para que un control funcione bien en una variedad de contenedores, el control debe ser capaz de asumir un nivel mínimo de funcionalidad en el que puede confiar en todos los contenedores.

Siguiendo estas directrices, los desarrolladores de controles y contenedores hacen que sus controles y contenedores sean más confiables e interoperables, y, en última instancia, mejor y más utilizable componentes para crear soluciones basadas en componentes.

Qué hacer cuando una interfaz que necesita no está disponible

Los programas OLE deben usar QueryInterface para adquirir punteros de interfaz y deben comprobar el valor devuelto. Las aplicaciones OLE no pueden suponer de forma segura que QueryInterface se realizará correctamente.

Este requisito se aplica a todas las aplicaciones OLE. Si la interfaz solicitada no está disponible (es decir, QueryInterface devuelve E_NOINTERFACE), el control o el contenedor deben degradarse correctamente, incluso si eso significa que no puede realizar su función de trabajo designada.

Directrices de contenedor de controles y controles ActiveX