Interfacce sottoposte a marshalling

L'obiettivo primario del Runtime Callable Wrapper (RCW) è nascondere le differenze tra i modelli di programmazione gestito e non gestito. Per semplificare la transizione, l'RCW utilizza interfacce COM selezionate senza esporle al client .NET, come illustrato nella figura che segue.

Interfacce COM e il Runtime Callable Wrapper

RCW con interfacce

Quando viene creato come oggetto ad associazione anticipata, l'RCW è specifico del tipo. Esso implementa le interfacce implementate dall'oggetto COM ed espone i metodi, le proprietà e gli eventi delle interfacce dell'oggetto. Nella figura l'RCW espone l'interfaccia INew ma utilizza le interfacce IUnknown e IDispatch. L'RCW espone inoltre al client .NET tutti i membri dell'interfaccia INew.

L'RCW utilizza le interfacce elencate nella tabella che segue, che sono esposte dall'oggetto di cui effettua il wrapping.

Interfaccia

Descrizione

IDispatch

Per l'associazione tardiva a oggetti COM tramite reflection.

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

Se l'oggetto COM di cui si effettua il wrapping implementa IProvideClassInfo, l'RCW estrarrà le informazioni contenute in tale interfaccia per definire meglio l'identità del tipo.

IUnknown

Per l'identità del tipo, l'assegnazione forzata e la gestione della durata:

  • Identità dell'oggetto

    Il runtime distingue tra gli oggetti COM confrontando il valore dell'interfaccia IUnknown di ciascun oggetto.

  • Assegnazione forzata

    L'RCW riconosce l'individuazione dinamica del tipo compiuta dal metodo QueryInterface.

  • Gestione della durata

    Utilizzando il metodo QueryInterface, l'RCW ottiene e mantiene un riferimento a un oggetto non gestito fino a quando il runtime effettua una procedura di Garbage Collection sul wrapper, che quale rilascia l'oggetto non gestito.

Talvolta l'RCW utilizza le interfacce elencate nella tabella che segue, che sono esposte dall'oggetto di cui effettua il wrapping.

Interfaccia

Descrizione

IConnectionPoint e IConnectionPointContainer

L'RCW converte gli oggetti che espongono eventi basati sui punti di connessione in eventi basati sui delegati.

IDispatchEx

Se la classe implementa IDispatchEx, l'RCW implementerà 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

Consente di trattare come insiemi i tipi COM che supportano l'enumerazione.

Vedere anche

Concetti

Runtime Callable Wrapper

Qualificazione di tipi .NET per l'interoperabilità

Altre risorse

Riepilogo della conversione da assembly a libreria dei tipi