Compartilhar via


Visão geral das diretrizes de contêiner de controle e controle

Um controle ActiveX é essencialmente um objeto OLE simples que oferece suporte a interface IUnknown. Ele geralmente oferece suporte a mais interfaces para oferecer funcionalidade, mas todas as interfaces adicionais podem ser vistas como opcionais e, como tal, um contêiner de controle não deve depender de nenhuma interface adicional sendo suportada. Ao não especificar interfaces adicionais que um controle deve suportar, um controle pode direcionar eficientemente uma área específica de funcionalidade sem ter que oferecer suporte a interfaces específicas para se qualificar como um controle. Como sempre acontece com o OLE, seja em um contêiner de controle ou de controle, nunca se deve presumir que uma interface está disponível e as convenções padrão de verificação de retorno devem sempre ser seguidas. É importante que um contêiner de controle ou controle degrade normalmente e ofereça funcionalidade alternativa se uma interface necessária não estiver disponível.

Um contêiner de controle ActiveX deve ser capaz de hospedar um controle ActiveX mínimo; ele também oferecerá suporte a várias interfaces adicionais, conforme especificado em Contêineres. Há uma série de interfaces e métodos que um contêiner pode oferecer suporte opcionalmente, que são agrupados em áreas funcionais conhecidas como categorias de componentes. Um contêiner pode oferecer suporte a qualquer combinação de categorias de componentes, por exemplo, uma categoria de componente existe para vinculação de dados e um contêiner pode ou não oferecer suporte à funcionalidade de vinculação de dados, dependendo das necessidades de mercado do contêiner. Se um controle precisar de suporte de vinculação de dados de um contêiner para funcionar, ele inserirá esse requisito no registro. Isso permite que um contêiner de controle ofereça apenas para inserção os controles que ele sabe que pode hospedar com êxito. É importante observar que as categorias de componentes são especificadas como parte do OLE e não são específicas para controles ActiveX, a arquitetura de controles usa categorias de componentes para identificar áreas de funcionalidade que um componente OLE pode suportar. As categorias de componentes não são cumulativas ou exclusivas, portanto, um contêiner de controle pode oferecer suporte a uma categoria sem necessariamente oferecer suporte a outra.

É importante que os controles que exigem recursos opcionais ou específicos de um determinado contêiner sejam claramente embalados e comercializados com esses requisitos. Da mesma forma, os contêineres que oferecem determinados recursos ou categorias de componentes devem ser comercializados e empacotados como oferecendo esses níveis de suporte ao hospedar controles ActiveX. Recomenda-se que os controles direcionem e testem com o maior número possível de contêineres e degradem normalmente para oferecer menos ou funcionalidade alternativa se interfaces ou métodos não estiverem disponíveis. Em uma situação em que um controle não pode executar sua função de trabalho designada sem o suporte de uma categoria de componente, essa categoria deve ser inserida como um requisito no registro, a fim de evitar que o controle seja inserido em um contêiner inadequado.

Essas diretrizes definem as interfaces e métodos que um controle pode esperar que um contêiner de controle suporte, embora, como sempre, um controle deva verificar os valores de retorno ao usar QueryInterface ou outros métodos para obter ponteiros para essas interfaces. Um contêiner não deve esperar que um controle ofereça suporte a nada mais do que a interface IUnknown, e essas diretrizes identificam quais interfaces um controle pode oferecer suporte e o que significa a presença de uma interface específica.

Por que as diretrizes de contêiner de controle ActiveX e controle são importantes

Os Controles ActiveX se tornaram a principal arquitetura para o desenvolvimento de componentes de software programáveis para uso em uma variedade de contêineres diferentes, desde ferramentas de desenvolvimento de software até ferramentas de produtividade do usuário final. Para que um controle funcione bem em uma variedade de contêineres, o controle deve ser capaz de assumir algum nível mínimo de funcionalidade no qual possa confiar em todos os contêineres.

Seguindo essas diretrizes, os desenvolvedores de controle e contêiner tornam seus controles e contêineres mais confiáveis e interoperáveis e, em última análise, componentes melhores e mais utilizáveis para a criação de soluções baseadas em componentes.

O que fazer quando uma interface que você precisa não está disponível

Programas OLE devem usar QueryInterface para adquirir ponteiros de interface e devem verificar o valor de retorno. Aplicativos OLE não podem assumir com segurança que QueryInterface terá êxito.

Esse requisito se aplica a todos os aplicativos OLE. Se a interface solicitada não estiver disponível (ou seja, QueryInterface retornará E_NOINTERFACE), o controle ou contêiner deverá degradar normalmente, mesmo que isso signifique que ele não pode executar sua função de trabalho designada.

Diretrizes de controle ActiveX e contêiner de controle