Condividi tramite


Considerazioni generali

È necessario che tutte le chiamate effettuate tra il codice gestito e non gestito negozino i requisiti imposti da ciascun modello di programmazione. Il modello di programmazione gestito e quello non gestito differiscono sotto molti aspetti. Nella tabella riportata di seguito sono illustrate le caratteristiche distintive di ciascun modello.

Caratteristica Modello non gestito Modello gestito

Modello di codifica

Basato su interfaccia

Basato su oggetto

Identità

GUID

Nomi sicuri

Meccanismo di gestione degli errori

HRESULT

Eccezioni

Compatibilità dei tipi

Standard binario

Standard dei tipi

Definizione dei tipi

Libreria dei tipi

Metadati

Indipendenza dai tipi

Non indipendente dai tipi

Eventualmente sicuro

Controllo delle versioni

Immutabile

Adattabile

Ad alcune caratteristiche dei modelli di programmazione sono associate entità che è possibile visualizzare, come le librerie dei tipi e i metadati. Alcune possono essere passate come argomenti, ad esempio i GUID (Globally Unique Identifier) e i nomi sicuri. Altre ancora sono più concettuali e il loro impatto sulla progettazione dell'applicazione deve essere indubbiamente preso in considerazione, ma non esiste un mapping diretto tra il modello gestito e quello non gestito per tali caratteristiche.

Nelle sezioni seguenti ogni caratteristica viene descritta nei dettagli.

  • Modelli di codifica
    La comunicazione con gli oggetti non gestiti avviene sempre tramite interfacce, mentre classi e oggetti gestiti possono passare direttamente i dati senza implementare le interfacce.

    Per impostazione predefinita, un'interfaccia di classe viene generata dall'interoperabilità COM per esporre la funzionalità gestita mediante un'interfaccia a COM quando non ne viene implementata una dall'oggetto o dalla classe.

  • Meccanismi di gestione degli errori
    Un HRESULT viene di solito restituito dai metodi COM per indicare se la chiamata è o meno riuscita. Il codice gestito incorpora le eccezioni. Per impostazione predefinita, con l'interoperabilità COM viene eseguito il mapping delle eccezioni gestite sugli HRESULT di errore.
  • Identità
    I GUID identificano un tipo non gestito specifico e non forniscono informazioni sul percorso a tale tipo. I nomi sicuri sono costituiti da un nome di assembly univoco oltre a un nome di tipo. Poiché il tipo viene specificato dal nome di assembly in modo univoco, è possibile riutilizzare un nome di tipo in più assembly. Tramite l'assembly vengono anche introdotte in un tipo gestito una chiave editore, una versione e informazioni sul percorso. I servizi di interoperabilità generano GUID e sono denominati in modo sicuro come richiesto.
  • Compatibilità dei tipi
    I tipi variano tra codice gestito e non gestito, nonché tra i linguaggi.
  • Definizioni dei tipi
    Come è noto a chi ha familiarità con le librerie dei tipi, queste contengono solo tipi pubblici. Una libreria dei tipi è inoltre facoltativa. Nel modello gestito di programmazione le informazioni sui tipi sono obbligatorie per tutti i tipi. I servizi di interoperabilità forniscono strumenti per la conversione delle librerie dei tipi in metadati in assembly e di metadati in librerie dei tipi.
  • Indipendenza dai tipi
    I compilatori non gestiti non prevedono il controllo dei tipi sui tipi di puntatore, esponendo il codice ad attività potenzialmente dannose. In generale, per il codice gestito viene richiesto un livello di attendibilità superiore. È possibile continuare a utilizzare i puntatori nel codice gestito, sebbene il codice presenti limitazioni dovute al comportamento non sicuro. I servizi di interoperabilità consentono di impedire l'accesso al codice non gestito da parte di codice gestito non attendibile.
  • Controllo delle versioni
    Le interfacce COM sono immutabili. Se si modifica un'interfaccia, è necessario rinominarla con un nuovo GUID. I tipi gestiti possono evolversi, pur mantenendo lo stesso nome.

Vedere anche

Altre risorse

Considerazioni di progettazione per l'interoperabilità