Simulazione di interfacce COM
Il COM Callable Wrapper (CCW) espone ai client COM tutti i tipi di dati, i valori restituiti e le interfacce pubbliche visibili a COM in modo conforme al meccanismo di interazione COM basato sulle interfacce. Per un client COM, chiamare i metodi di un oggetto .NET Framework non è diverso dal chiamare i metodi di un oggetto COM.
Per assicurare questo approccio naturale, il CCW crea interfacce COM tradizionali quali IUnknown e IDispatch. Come illustrato nella figura che segue, il CCW mantiene un solo riferimento all'oggetto .NET di cui effettua il wrapping. Il client COM e l'oggetto .NET interagiscono tramite il proxy e lo stub del CCW.
Interfacce COM e il COM Callable Wrapper
Oltre a esporre le interfacce che sono esplicitamente implementate da una classe dell'ambiente gestito, .NET Framework fornisce per l'oggetto un'implementazione delle interfacce COM elencate nella tabella che segue. Una classe .NET può cambiare il comportamento predefinito fornendo la propria implementazione di queste interfacce. Il runtime tuttavia fornisce sempre l'implementazione delle interfacce IUnknown e IDispatch.
Interfaccia |
Descrizione |
---|---|
IDispatch |
Fornisce un meccanismo per l'associazione tardiva al tipo. |
IErrorInfo |
Fornisce una descrizione testuale dell'errore, la relativa origine, un file della Guida, un contesto della Guida e il GUID dell'interfaccia che ha definito l'errore (sempre GUID_NULL per le classi .NET). |
IProvideClassInfo |
Consente ai client COM di ottenere l'accesso all'interfaccia ITypeInfo implementata da una classe gestita. |
IsupportErrorInfo |
Consente a un client COM di determinare se l'oggetto gestito supporta l'interfaccia IErrorInfo. Se sì, consente al client di ottenere un puntatore all'ultimo oggetto di eccezione. Tutti i tipi gestiti supportano l'interfaccia IErrorInfo. |
ItypeInfo |
Fornisce per le classi le stesse informazioni sul tipo che fornisce Tlbexp.exe. |
IUnknown |
Fornisce l'implementazione standard dell'interfaccia IUnknown con cui il client COM gestisce la durata del CCW e provvede all'assegnazione forzata. |
Le classi gestite possono anche fornire le interfacce COM descritte nella tabella che segue.
Interfaccia |
Descrizione |
---|---|
L'interfaccia della classe (_nomeclasse) |
Interfaccia, esposta dal runtime e non definita esplicitamente, che espone tutte le interfacce, i metodi, le proprietà e i campi pubblici esplicitamente esposti su un oggetto gestito. |
IConnectionPoint e IconnectionPointContainer |
Interfaccia per oggetti che originano eventi basati su delegati (un'interfaccia per la registrazione di sottoscrittori di eventi). |
IdispatchEx |
Interfaccia fornita dal runtime se la classe implementa IExpando. L'interfaccia IDispatchEx è un'estensione dell'interfaccia IDispatch, ma diversamente da IDispatch consente l'enumerazione, l'aggiunta, l'eliminazione e la chiamata dei membri con distinzione tra maiuscole e minuscole. |
IEnumVARIANT |
Interfaccia per classi di tipo insieme, che enumerano gli oggetti dell'insieme se la classe implementa IEnumerable. |