Condividi tramite


Che cosa significa il supporto per un'interfaccia

Oltre all'interfaccia IUnknown , un controllo ActiveX o un oggetto COM per tale questione esprime qualsiasi funzionalità facoltativa supportata tramite interfacce aggiuntive. Ciò significa che non sono necessarie altre interfacce sopra IUnknown. A tale scopo, nella tabella seguente sono elencate le interfacce che un controllo ActiveX potrebbe supportare e cosa significa supportare tale interfaccia.

Interfaccia Commenti/Cosa significa supportare l'interfaccia
Ioleobject
Se il controllo richiede la comunicazione con il sito client per qualsiasi elemento diverso da eventi (vedere I Connessione ionPointContainer), IOleObject è una necessità. Quando si implementa questa interfaccia, il controllo deve supportare anche la semantica dei metodi seguenti: SetHostNames, Close, EnumVerbs, Update, IsUpToDate, GetUserClassID, GetUserType, GetMiscStatus e Advise, Unadvise e Metodi EnumAdvise che funzionano insieme all'implementazione IAdviseSink di un contenitore. Un controllo che implementa IOleObject deve essere in grado di gestire IAdviseSink se il contenitore ne fornisce uno. In questo caso, un controllo garantisce, naturalmente, che non tenti di chiamare un sink inesistente.
IOleInPlaceObject
Esprime la capacità del controllo di essere attivata sul posto ed eventualmente attivata dall'interfaccia utente. Questa interfaccia indica che il controllo ha un'interfaccia utente di qualche tipo che può essere attivata e anche IOleInPlaceActiveObject è supportato. I metodi obbligatori sono GetWindow, InPlaceDeactivate, UIDeactivate, SetObjectRects e ReactivateAndUndo. Il supporto per questa interfaccia richiede il supporto per IOleObject.
IOleInPlaceActiveObject
Un oggetto in grado di supportare sul posto che supporta IOleInPlaceObject deve anche fornire questa interfaccia, anche se il controllo stesso non implementa necessariamente l'interfaccia direttamente.
IOleControl
Esprime la capacità e il desiderio di gestire (a) mnemonics (GetControlInfo, metodi OnMnemonic), (b) proprietà di ambiente (OnAmbientPropertyChange) e/o (c) che il controllo richiede che il contenitore gestisca (FreezeEvents). Si noti che i mnemonic sono diversi dagli acceleratori gestiti tramite IOleInPlaceActiveObject: i mnemonic hanno associato l'interfaccia utente e sono attivi anche quando il controllo non è attivo dall'interfaccia utente. Il supporto di un controllo per mnemonics significa che il controllo sa anche come usare il metodo IOleControlSite::OnControlInfoChanged del contenitore. Poiché è necessario che il controllo conosca il sito del contenitore, il supporto per mnemonics significa anche il supporto per IOleObject. Inoltre, la conoscenza di mnemonics richiede il supporto sul posto e quindi IOleInPlaceObject.
Se un controllo usa proprietà di ambiente contenitore, deve implementare anche questa interfaccia per ricevere notifiche di modifica, come indicato nella semantica delle modifiche è necessaria. Poiché le proprietà di ambiente sono disponibili solo tramite IDispatch del sito contenitore, il supporto delle proprietà di ambiente significa che il controllo supporta IOleObject (per ottenere il sito) e la possibilità di generare chiamate IDispatch::Invoke.
Il metodo FreezeEvents è necessario per i controlli che devono sapere quando un contenitore non gestirà un evento, questo è l'unico modo per controllare questa condizione. Se FreezeEvents è necessario solo in isolamento, in modo che altri metodi IOleControl non vengano implementati, IOleControl può essere autonomo senza IOleObject o IOleInPlaceObject.
Idataobject
Indica che il controllo può fornire almeno (a) rendering grafici del controllo (CF_METAFILEPICT è il minimo se il controllo dispone di oggetti visivi) e/o (b) set di proprietà, se il controllo dispone di proprietà da fornire. Sono necessari i metodi GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadvise e EnumDAdvise. Il supporto per formati grafici diversi da CF_METAFILEPICT è facoltativo.
IViewObject2
Indica che il controllo dispone di alcuni oggetti visivi interessanti quando non è attivo sul posto. Se implementato, un controllo deve supportare i metodi Draw, GetAdvise, SetAdvise e GetExtent.
IDispatch
Indica che il controllo dispone di metodi personalizzati (a) o (b) proprietà personalizzate che sono entrambi disponibili tramite associazione tardiva tramite IDispatch::Invoke. Questo richiede inoltre che il controllo fornisca informazioni sul tipo tramite altri metodi IDispatch . Un controllo può supportare più implementazioni IDispatch in cui solo uno è associato a IID_IDispatch gli altri devono avere identificatori univoci dispinterface.
Un controllo è incoraggiato a fornire interfacce duali per l'accesso a metodi e proprietà personalizzati, ma questo è facoltativo se esistono metodi e proprietà.
I Connessione ionPointContainer
Indica che un controllo supporta almeno un'interfaccia in uscita, ad esempio eventi o notifiche di modifica delle proprietà. Tutti i metodi di questa interfaccia devono essere implementati se questa interfaccia è disponibile, inclusi Enum Connessione ionPoints che richiede un oggetto separato con IEnum Connessione ionPoints.
Il supporto per I Connessione ionPointContainer significa che l'oggetto supporta anche uno o più oggetti correlati con I Connessione ionPoint disponibili tramite i metodi I Connessione ionPointContainer. Ogni oggetto punto di connessione deve implementare l'interfaccia I Connessione ionPoint completa, tra cui Enum Connessione ions, che richiede un altro oggetto enumeratore con l'interfaccia IEnum Connessione ions.
IProvideClassInfo
IProvideClassInfo2
Indica che l'oggetto può fornire informazioni sul tipo di coclasse direttamente tramite IProvideClassInfo::GetClassInfo. Se il controllo supporta la variante successiva IProvideClassInfo2, indica anche la possibilità di fornire il relativo IID di origine primario tramite IProvideClassInfo2::GetGUID. Tutti i metodi di questa interfaccia devono essere implementati.
ISpecifyPropertyPages
Indica che il controllo dispone di pagine delle proprietà che può essere visualizzata in modo che un contenitore possa coordinare le pagine delle proprietà di questo controllo con le pagine di altri controlli quando devono essere visualizzate pagine delle proprietà per una selezione a più controlli. Tutti i metodi di questa interfaccia devono essere implementati quando esiste il supporto.
IPerPropertyBrowsing
Indica la possibilità di (a) fornire una stringa di visualizzazione per una proprietà ( b) specificare stringhe e valori predefiniti per le relative proprietà e/o (c) eseguire il mapping di una proprietà dispID a una pagina delle proprietà specifica. Il supporto per questa interfaccia significa che viene fornito il supporto per le proprietà tramite IDispatch, come indicato in precedenza. Se (c) è supportato, significa anche che le pagine delle proprietà dell'oggetto mappate tramite IPerPropertyBrowsing::MapPropertyToPage stesso implementano IPropertyPage2 anziché l'interfaccia IPropertyPage di base.
Ipersiststream
IPersistStreamInit
Ipersistmemory
IPersist Archiviazione
IPersistMoniker
IPersistPropertyBag
Vedere Interfacce di persistenza.
IOleCache
IOleCache2
Indica il supporto per la memorizzazione nella cache dei contenitori degli oggetti visivi di controllo. Un controllo ottiene in genere il supporto per la memorizzazione nella cache tramite la funzione OLE CreateDataCache. Solo i controlli con contenuto statico significativo devono scegliere di eseguire questa operazione (anche se non è obbligatorio). Se un controllo supporta la memorizzazione nella cache, deve semplicemente aggregare la cache dei dati ed esporre entrambe le interfacce IOleCache e IOleCache2 dalla cache dei dati. Un controllo che implementa IOleObject deve essere in grado di gestire IAdviseSink se il contenitore ne fornisce uno. In questo caso, un controllo garantisce, naturalmente, che non tenti di chiamare un sink inesistente.
IExternal Connessione ion
Indica che il controllo supporta collegamenti esterni a se stesso; ovvero, il controllo non è contrassegnato con OLEMISC_CANTLINKINSIDE e supporta IOleObject::SetMoniker e IOleObject::GetMoniker. Un contenitore non eseguirà mai una query per questa interfaccia né la chiamerà direttamente perché le chiamate vengono generate dal livello di comunicazione remota di OLE.
IRunnableObject
Indica che il controllo distingue l'esecuzione da parte di alcuni oggetti in-process.

Controlli