Cenni preliminari sull'interoperabilità (Guida per programmatori C#)

Aggiornamento: Luglio 2008

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 (valori integer, 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 il richiamo piattaforma per riprodurre un file audio (Guida per programmatori C#).

Nota:

Common Language Runtime (CLR) gestisce l'accesso alle risorse di sistema. La chiamata del codice gestito all'esterno di CLR consente di ignorare il meccanismo di protezione 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 protezione 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.

Per ulteriori informazioni, vedere Procedura: eseguire il wrapping di una classe nativa affinché possa essere utilizzata in C# e Utilizzo delle funzionalità di interoperabilità C++ (PInvoke implicito).

Esposizione di componenti COM a C#

È possibile utilizzare un componente COM da un progetto C#. La procedura generale è la seguente:

  1. Individuare un componente COM da utilizzare e registrarlo. Per registrare o annullare la registrazione di una DLL COM, utilizzare regsvr32.exe.

  2. Aggiungere al progetto un riferimento al componente COM o alla libreria dei tipi.

    Quando si aggiunge il riferimento, Visual Studio utilizza Utilità di importazione della libreria dei tipi (Tlbimp.exe), 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 all'assembly generato.

  3. Creare un'istanza di una classe definita in RCW. Questa operazione crea, a sua volta, un'istanza dell'oggetto COM.

  4. 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.

  1. Aggiungere arributi 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.

  2. Generare una libreria dei tipi COM e registrarla per l'utilizzo di COM

    È possibile modificare le proprietà del progetto Visual C# per la registrazione automatica dell'assembly C# per l'interoperabilità COM. Visual Studio utilizzaStrumento di registrazione degli assembly (Regasm.exe), mediante l'opzione /tlb della riga di comando, 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 Procedura: registrare un componente per l'interoperabilità COM.

Per ulteriori informazioni, vedere Esposizione di componenti .NET Framework a COM e Classe COM di esempio (Guida per programmatori C#).

Vedere anche

Concetti

Guida per programmatori C#

Altre risorse

Interoperabilità con codice non gestito

Interoperabilità COM avanzata

Interoperabilità in .NET Compact Framework

Miglioramento delle prestazioni di interoperabilità

Introduzione all'interoperabilità COM

Marshalling tra codice gestito e non gestito

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2008

Aggiornamento della documentazione per trattare più tipi di interoperabilità.

Miglioramento delle informazioni.