Panoramica dell'interoperabilità
L'interoperabilità consente di preservare e sfruttare appieno gli investimenti effettuati in codice non gestito. Il codice eseguito sotto il controllo di Common Language Runtime (CLR) è detto codice gestito, mentre quello eseguito all'esterno di CLR è chiamato codice non gestito. Esempi di codice non gestito sono i componenti COM, COM+, C++, i componenti ActiveX e le API Microsoft Windows.
.NET consente l'interoperabilità con il codice non gestito tramite i servizi platform invoke, lo spazio dei nomi System.Runtime.InteropServices, l'interoperabilità C++ e l'interoperabilità COM.
Platform invoke
Platform invoke è un servizio che consente al codice gestito di chiamare funzioni non gestite implementate in librerie di collegamento dinamico (DLL), ad esempio l'API Microsoft Windows. Individua e richiama una funzione esportata ed esegue il marshalling degli argomenti (Integer, stringhe, matrici, strutture e così via) nel limite dell'interazione, in base alle necessità.
Per altre informazioni, vedere Utilizzo di funzioni DLL non gestite e Come usare platform invoke per riprodurre un file WAV.
Nota
Il Common Language Runtime (CLR) gestisce l'accesso alle risorse di sistema. La chiamata di codice non gestito esterno al CLR ignora questo meccanismo di sicurezza e presenta pertanto un rischio per la sicurezza. Ad esempio, il codice non gestito può chiamare direttamente le risorse nel codice non gestito, ignorando i meccanismi di sicurezza CLR. Per altre informazioni, vedere Sicurezza in .NET.
interoperabilità C++
È possibile usare l'interoperabilità C++, nota anche come IJW (It Just Works), per eseguire il wrapping di una classe C++ nativa. L'interoperabilità C++ consente al codice creato in C# o in un altro linguaggio .NET di accedervi. A tale scopo, scrivere codice C++ per eseguire il wrapping di un componente COM o DLL nativo. A differenza di altri linguaggi .NET, Visual C++ offre un tipo di supporto per l'interoperabilità che permette la presenza di codice gestito e non gestito nella stessa applicazione e anche nello stesso file. Compilare quindi il codice C++ mediante l'opzione del compilatore /clr per produrre un assembly gestito. Infine, aggiungere un riferimento all'assembly nel progetto C# e usare gli oggetti con wrapping esattamente come si userebbero altre classi gestite.
Esposizione di componenti COM a C#
È possibile usare un componente COM da un progetto C#. In generale, i passaggi sono i seguenti:
- Individuare un componente COM da usare e registrarlo. Usare regsvr32.exe per registrare o annullare la registrazione di una DLL COM.
- Aggiungere al progetto un riferimento alla libreria dei componenti o dei tipi COM. Quando si aggiunge il riferimento, Visual Studio usa Tlbimp.exe (utilità di importazione della libreria dei tipi), che accetta una libreria dei tipi come input, per generare un assembly di interoperabilità .NET. L'assembly, denominato anche Runtime Callable Wrapper (RCW), contiene le classi gestite e le interfacce che eseguono il wrapping delle classi e interfacce COM presenti nella libreria dei tipi. Visual Studio aggiunge al progetto un riferimento all'assembly generato.
- Creare un'istanza di una classe definita in RCW. La creazione di un'istanza di tale classe crea un'istanza dell'oggetto COM.
- Usare l'oggetto allo stesso modo di altri oggetti gestiti. Quando l'oggetto viene recuperato da Garbage Collection, anche l'istanza dell'oggetto COM viene rilasciata dalla memoria.
Per altre informazioni, vedere Esposizione di componenti COM a .NET Framework.
Esposizione di C# a COM
I client COM possono usare i tipi di C# che sono stati esposti in modo corretto. I passaggi di base per esporre tipi di C# sono i seguenti:
- Aggiungere gli attributi di interoperabilità nel progetto C#. È possibile rendere un assembly visibile a COM modificando le proprietà del progetto C#. Per altre informazioni, vedere Finestra di dialogo Informazioni assembly.
- Generare una libreria dei tipi COM e registrarla per l'uso di COM.
È possibile modificare le proprietà del progetto C# per registrare automaticamente l'assembly C# per l'interoperabilità COM. Visual Studio usa Regasm.exe (strumento di registrazione di assembly), tramite l'opzione della riga di comando
/tlb
, che accetta un assembly gestito come input, per generare una libreria dei tipi. Questa libreria dei tipi descrive i tipipublic
nell'assembly e aggiunge le voci del Registro di sistema in modo che i client COM possano creare classi gestite.
Per altre informazioni, vedere Esposizione di componenti .NET Framework a COM e Esempio di classe COM.
Vedi anche
- Improving Interop Performance (Miglioramento delle prestazioni di interoperabilità)
- Introduction to Interoperability between COM and .NET (Introduzione all'interoperabilità tra COM e .NET)
- Introduzione all'interoperabilità COM (Visual Basic)
- Marshaling between Managed and Unmanaged Code (Marshalling tra codice gestito e non gestito)
- Interoperabilità con codice non gestito