Compartilhar via


O que significa suporte para uma interface

Além da interface IUnknown , um controle ActiveX ou objeto COM para esse assunto expressa qualquer funcionalidade opcional que ele suporta através de interfaces adicionais. Isso quer dizer que nenhuma outra interface é necessária acima de IUnknown. Para esse fim, a tabela a seguir lista as interfaces que um controle ActiveX pode oferecer suporte e o que significa oferecer suporte a essa interface.

Interface Comentários/O que significa suportar a interface
IOleObject
Se o controle requer comunicação com seu site cliente para qualquer coisa diferente de eventos (consulte IConnectionPointContainer), IOleObjecté uma necessidade. Ao implementar essa interface, o controle também deve oferecer suporte à semântica dos seguintes métodos: SetHostNames, Close, EnumVerbs, Update, IsUpToDate, GetUserClassID, GetUserType, GetMiscStatus e Advise, Unadvise e Métodos EnumAdvise que funcionam em conjunto com a implementação IAdviseSink de um contêiner. Um controle que implementa IOleObject deve ser capaz de manipular IAdviseSink se o contêiner fornecer um, um contêiner não pode, caso em que um controle garante, é claro, que ele não tente chamar um coletor inexistente.
IOleInPlaceObject
Expressa a capacidade do controle de ser ativado no local e, possivelmente, ativado pela interface do usuário. Essa interface significa que o controle tem uma interface de usuário de algum tipo que pode ser ativada, e IOleInPlaceActiveObject também é suportado. Os métodos necessários são GetWindow, InPlaceDeactivate, UIDeactivate, SetObjectRects e ReactivateAndUndo. O suporte para essa interface requer suporte para IOleObject.
IOleInPlaceActiveObject
Um objeto capaz in-loco que ofereça suporte a IOleInPlaceObject também deve fornecer essa interface, embora o controle em si não necessariamente implemente a interface diretamente.
IOleControl
Expressa a capacidade e o desejo do controle de lidar com (a) mnemônicos (GetControlInfo, métodos OnMnemonic), (b) propriedades de ambiente (OnAmbientPropertyChange) e/ou (c) eventos que o controle requer que o contêiner manipule (FreezeEvents). Observe que os mnemônicos são diferentes dos aceleradores manipulados por meio de IOleInPlaceActiveObject: os mnemônicos têm a interface do usuário associada e estão ativos mesmo quando o controle não está ativo na interface do usuário. O suporte de um controle para mnemônicos significa que o controle também sabe como usar o método IOleControlSite::OnControlInfoChanged do contêiner. Como isso requer o controle para conhecer o site do contêiner, o suporte para mnemônicos também significa suporte para IOleObject. Além disso, o conhecimento de mnemônicos requer suporte in-loco e, portanto, IOleInPlaceObject.
Se um controle usa quaisquer propriedades de ambiente de contêiner, ele também deve implementar essa interface para receber notificações de alteração, pois seguir a semântica das alterações é necessário. Como as propriedades de ambiente só estão disponíveis por meio do IDispatch do site de contêiner, o suporte à propriedade de ambiente significa que o controle oferece suporte a IOleObject (para obter o site), além de poder gerar chamadas IDispatch::Invoke.
O método FreezeEvents é necessário para controles que devem saber quando um contêiner não vai manipular um evento, essa é a única maneira de o controle conhecer essa condição. Se FreezeEvents for necessário apenas isoladamente, de modo que outros métodos IOleControl não sejam implementados, IOleControl poderá ficar sozinho sem IOleObject ou IOleInPlaceObject.
IDataObject
Indica que o controle pode fornecer pelo menos (a) renderizações gráficas do controle (CF_METAFILEPICT é o mínimo se o controle tiver qualquer elemento visual) e/ou (b) conjuntos de propriedades, se o controle tiver quaisquer propriedades a fornecer. Os métodos GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadvise e EnumDAdvise são necessários. O suporte para formatos gráficos diferentes do CF_METAFILEPICT é opcional.
IViewObject2
Indica que o controle tem alguns visuais interessantes quando não está ativo no local. Se implementado, um controle deve oferecer suporte aos métodos Draw, GetAdvise, SetAdvise e GetExtent.
IDispatch
Indica que o controle tem (a) métodos personalizados ou (b) propriedades personalizadas que estão disponíveis por meio de vinculação tardia por meio de IDispatch::Invoke. Isso também requer que o controle forneça informações de tipo por meio de outros métodos IDispatch . Um controle pode oferecer suporte a várias implementações IDispatch em que apenas uma está associada a IID_IDispatch as outras devem ter seus próprios identificadores dispinterface exclusivos.
Um controle é incentivado a fornecer interfaces duplas para acesso a método personalizado e propriedade, mas isso é opcional se existirem métodos e propriedades.
IConnectionPointContainer
Indica que um controle oferece suporte a pelo menos uma interface de saída, como eventos ou notificações de alteração de propriedade. Todos os métodos dessa interface devem ser implementados se essa interface estiver disponível, incluindo EnumConnectionPoints, que requer um objeto separado com IEnumConnectionPoints.
Suporte para IConnectionPointContainer significa que o objeto também oferece suporte a um ou mais objetos relacionados com IConnectionPoint que estão disponíveis por meio de IConnectionPointContainer métodos. Cada objeto de ponto de conexão em si deve implementar a interface IConnectionPoint completa, incluindo EnumConnections, que requer outro objeto enumerador com a interface IEnumConnections.
IProvideClassInfo
IProvideClassInfo2
Indica que o objeto pode fornecer suas próprias informações de tipo de coclasse diretamente por meio de IProvideClassInfo::GetClassInfo. Se o controle oferecer suporte à variação posterior IProvideClassInfo2, ele também indicará sua capacidade de fornecer sua fonte primária IID por meio de IProvideClassInfo2::GetGUID. Todos os métodos desta interface devem ser implementados.
ISpecifyPropertyPages
Indica que o controle tem páginas de propriedades que ele pode exibir de tal forma que um contêiner pode coordenar as páginas de propriedades desse controle com as páginas de outro controle quando as páginas de propriedades devem ser mostradas para uma seleção de vários controles. Todos os métodos dessa interface devem ser implementados quando houver suporte.
IPerPropertyBrowsing
Indica a capacidade do controle de (a) fornecer uma cadeia de caracteres de exibição para uma propriedade, (b) fornecer cadeias de caracteres e valores predefinidos para suas propriedades e/ou (c) mapear um dispID de propriedade para uma página de propriedades específica. O suporte para essa interface significa que o suporte para propriedades por meio de IDispatch como acima é fornecido. Se (c) for suportado, isso também significa que as páginas de propriedades do objeto mapeadas por meio de IPerPropertyBrowsing::MapPropertyToPage implementam IPropertyPage2 em oposição à interface IPropertyPage básica.
IPersistStream
IPersistStreamInit
IPersistMemory
IPersistStorage
IPersistMoniker
IPersistPropertyBag
Consulte Interfaces de persistência.
IOleCache
IOleCache2
Indica suporte para cache de contêiner de visuais de controle. Um controle geralmente obtém suporte de cache por meio da função OLE CreateDataCache. Somente controles com conteúdo estático significativo devem optar por fazer isso (embora não seja necessário). Se um controle oferecer suporte ao cache, ele deverá simplesmente agregar o cache de dados e expor as interfaces IOleCache e IOleCache2 do cache de dados. Um controle que implementa IOleObject deve ser capaz de manipular IAdviseSink se o contêiner fornecer um, um contêiner não pode, caso em que um controle garante, é claro, que ele não tente chamar um coletor inexistente.
IExternalConnection
Indica que o controle suporta links externos para si mesmo; ou seja, o controle não é marcado com OLEMISC_CANTLINKINSIDE e oferece suporte a IOleObject::SetMoniker e IOleObject::GetMoniker. Um contêiner nunca consultará essa interface em si nem a chamará diretamente, pois as chamadas são geradas de dentro da camada remota do OLE.
IRunnableObject
Indica que o controle diferencia ser carregado de estar em execução, como alguns objetos em processo.

Controles