Cenni preliminari sull'interoperabilità (Guida per programmatori C#)
In questo argomento vengono descritti i metodi per attivare l'interoperabilità tra codice gestito e non gestito in C#.
Platform Invoke
Platform invoke costituisce un servizio che consente la chiamata di funzioni non gestite implementate in librerie a collegamento dinamico (DLL, Dynamic-Link Library), quali quelle della API Microsoft Win32, da parte del codice gestito. Tale servizio trova e chiama una funzione esportata ed esegue il marshalling dei relativi argomenti (interi, stringhe, matrici, strutture e così via) nell'attraversamento dei limiti di interoperabilità, secondo necessità.
Per ulteriori informazioni, vedere Utilizzo di funzioni di DLL non gestite e Procedura: utilizzare platform invoke per riprodurre un file audio (Guida per programmatori C#).
Nota
Common Language Runtime (CLR) (CLR) gestisce l'accesso alle risorse di sistema.La chiamata del codice gestito all'esterno di CLR consente di ignorare il meccanismo di sicurezza e pertanto costituisce un rischio per la sicurezza.Il codice non gestito può ad esempio chiamare direttamente le risorse nel codice non gestito, ignorando i meccanismi di sicurezza di CLR.Per ulteriori informazioni, .NET Framework Security (informazioni in lingua inglese).
Interoperabilità C++
È possibile utilizzare l'interoperabilità C++, nota anche come It Just Works (IJW), per eseguire il wrapping di una classe C++ nativa in modo che possa essere utilizzata da codice creato in C# o in un altro linguaggio .NET Framework. A tale scopo, scrivere il codice C++ per eseguire il wrapping di un componente DLL o COM nativo. A differenza degli altri linguaggi .NET Framework, in Visual C++ viene fornito il supporto per l'interoperabilità che consente la presenza di codice gestito e codice non gestito nella stessa applicazione e persino nello stesso file. Quindi compilare il codice C++ mediante l'opzione /clr del compilatore per produrre un assembly gestito. Infine, aggiungere un riferimento all'assembly nel progetto C# e utilizzare gli oggetti di cui è stato eseguito il wrapping nello stesso modo in cui verrebbero utilizzate altre classi gestite.
Esposizione di componenti COM a C#
È possibile utilizzare un componente COM da un progetto C#. La procedura generale è la seguente:
Individuare un componente COM da utilizzare e registrarlo. Per registrare o annullare la registrazione di una DLL COM, utilizzare regsvr32.exe.
Aggiungere al progetto un riferimento al componente COM o alla libreria dei tipi.
Quando si aggiunge il riferimento, Visual Studio utilizza Tlbimp.exe (utilità di importazione della libreria dei tipi), che accetta una libreria dei tipi come input, per generare come output un assembly di interoperabilità .NET Framework. L'assembly, denominato anche Runtime Callable Wrapper (RCW), contiene classi e interfacce gestite che eseguono il wrapping delle classi e delle interfacce COM presenti nella libreria dei tipi. Visual Studio aggiunge al progetto un riferimento per l'assembly generato.
Creare un'istanza di una classe definita in RCW. Questa operazione crea, a sua volta, un'istanza dell'oggetto COM.
Utilizzare l'oggetto nello stesso modo in cui si utilizzano altri oggetti gestiti. Quando l'oggetto viene recuperato tramite Garbage Collection, anche l'istanza dell'oggetto COM viene rilasciata dalla memoria.
Per ulteriori informazioni, vedere Esposizione di componenti COM a .NET Framework.
Esposizione di C# a COM
I client COM possono utilizzare i tipi C# esposti correttamente. Le operazioni da eseguire per esporre i tipi C# sono elencate di seguito.
Aggiungere attributi di interoperabilità al progetto C#.
È possibile rendere visibile un assembly COM modificando le proprietà del progetto Visual C#. Per ulteriori informazioni, vedere Finestra di dialogo Informazioni assembly.
Generare una libreria dei tipi COM e registrarla per l'utilizzo di COM
È possibile modificare le proprietà del progetto Visual C# per registrare automaticamente l'assembly C# per l'interoperabilità COM. Visual Studio utilizza Regasm.exe (strumento di registrazione di assembly), mediante l'opzione della riga di comando /tlb che accetta un assembly gestito come input per generare una libreria dei tipi. In questa libreria dei tipi vengono descritti i tipi public nell'assembly e aggiunte voci del Registro per consentire ai client COM di creare classi gestite.
Per ulteriori informazioni, vedere Esposizione di componenti .NET Framework a COM e Esempio di classe COM (Guida per programmatori C#).
Vedere anche
Concetti
Altre risorse
Miglioramento delle prestazioni di interoperabilità
Introduzione di interoperabilità COM
Marshalling tra codice gestito e non gestito