Interoperatività (in inglese Interoperation) è un termine utilizzato in riferimento alla pratica di interagire con porzioni di "codice non gestito" all’interno di un codice gestito. Infatti, sebbene il .NET Framework fornisca un grande numero di funzionalità, due situazioni rendono l’interoperatività necessaria:
Ad esempio un’applicazione potrebbe avere la necessità di utilizzare una procedura dell’ambiente Microsoft Excel e, dato che la libreria Excel non è scritta in .NET, sarà necessario, per accedere ad essa, fare ricorso al cosiddetto Component Object Model (COM).
.NET e COM sono due ambienti di esecuzione molto differenti e l’unico modo di condividere funzionalità tra di loro è quello di utilizzare l’interoperatività, conosciuta anche come Interop. Prima dell’avvento del .NET Framework il COM era il framework di riferimento attraverso cui gli sviluppatori interagivano con i sistemi operativi Windows.
Una cosa che i due ambienti hanno in comune è il fatto che per utilizzare librerie esterne occorre prima importarle. Dopo averle importate è possibile dichiarare e istanziare oggetti appartenenti a tali librerie nello stesso modo degli oggetti appartenenti al framework stesso. E’ possibile importare nuovi tipi sia da codice, sia impostando i giusti riferimenti in Visual Studio.
Il .NET Framework fornisce un grande supporto per l’interoperatività COM, inclusa la possibilità di importare librerie di tipi. Il meccanismo che consente la comunicazione tra l’ambiente di esecuzione .NET e un componente COM è denominato Runtime Callable Wrapper (RCW). Tale componente gestisce la maggior parte degli aspetti riguardanti la comunicazione tra i due ambienti, inclusi gestione degli eventi e gestione delle interfacce.
Diversamente dai componenti .NET, i componenti COM devono essere registrati prima di essere utilizzati. Dopo la registrazione questi componenti necessitano di essere importati tramite Visual Studio o tramite lo strumento Type Library Importer. Se, ad esempio, vogliamo utilizzare una particolare libreria o DLL, denominata utility.dll, dobbiamo aprire il prompt dei comandi DOS e registrare tale componente scrivendo ed eseguendo la seguente riga
Vediamo adesso i due modi in cui è possibile importare tale DLL. In Viual Studio, all’interno del progetto in cui si vuole utilizzarla, basta cliccare con il tasto destro del mouse sul nodo References, scegliendo l’opzione Add Reference
Nella finestra che si apre apriamo la scheda COM, selezioniamo la DLL registrata e clicchiamo su OK
Per importare invece la DLL tramite lo strumento Type Library Importer occorre avviare il prompt dei comandi di Visual Studio
Impostare il percorso della DLL e scrivere la seguente linea
Utilizzo progetti COM
Vediamo adesso come utilizzare gli oggetti COM. Dopo l’importazione vista in precedenza utilizzare un oggetto di questo tipo è virtualmente equivalente ad utilizzarne uno puramente .NET. Nell’esempio che seguirà utilizzeremo il componente COM Adobe PDF Reader per aprire e leggere un file .pdf.
Avviamo Visual Studio e creiamo una nuova applicazione Windows Form, dandogli il nome che preferiamo. Dal menù Tools selezioniamo l’opzione Choose Toolbox Items
La finestra di dialogo che compare presenta diverse schede, tra cui COM Components. Selezioniamo quest’ultima scheda, spuntiamo il componente Adobe PDF Reader e clicchiamo su OK
Nella scheda General del Toolbox comparirà il componente appena aggiunto
Trasciniamolo e rilasciamolo sul form principale
L’istanza dell’oggetto viene denominata automaticamente axAcroPDF1. A questo punto all’interno del metodo Load del form inseriamo il seguente codice
dove dovete sostituire la stringa TitoloDocumento con il titolo effettivo del vostro file .pdf.
Come è possibile constatare si tratta di un’operazione alquanto semplice. Il motivo di tale semplicità è che quando una DLL viene importata viene parallelamente creato un .NET Assembly. Dal punto di vista del programmatore non è possibile capire da chi sia generato il codice e quindi il suo utilizzo risulta semplice come l’utilizzo dei vari componenti .NET.
Occorre fare alcune considerazioni sulla gestione delle eccezioni. La classe System.Exception occupa l’apice della gerarchia di gestione delle eccezioni e tramite un oggetto appartenente a tale classe è possibile gestire qualsiasi errore si verifichi in un’applicazione .NET. Questo a partire dalla versione 2.0 del .NET Framework, perchè in precedenza la suddetta classe poteva gestire solo eccezioni di tipo CLS (Common Language Specification) e gli errori generati dagli oggetti COM non appartengono a tale tipologia, quindi non venivano gestiti.
A partire dalla versione 2.0 del .NET Framework è stata introdotta la classe RuntimeWrappedException, appartenente al namespace System.Runtime.CompilerServices. Tale classe espone diverse proprietà ereditate dalla classe System.Exception, tra cui la proprietà WrappedException. Tale proprietà è molto importante perchè in .NET quando si verifica un’eccezione non di tipo CLS il linguaggio di esecuzione crea un’istanza di tale classe e imposta tale proprietà sull’oggetto che genera l’eccezione.
Questo comportamento viene gestito automaticamente ed è completamente trasparente al programmatore
Sebbene dunque sia possibile utilizzare gli oggetti COM occorre precisare che in generale essi presentano alcune limitazioni:
In questo articolo ci siamo soffermati sull’utilizzo di componenti COM all’interno dell’ambiente .NET ma bisogna sottolineare che può avvenire anche il processo inverso e probabilmente in un prossimo articolo vedremo come fare ciò.
mrwebmaster.it
Formattazione testo mia.
- L’esistenza in molte aziende del cosiddetto legacy code, ovvero codice già sviluppato e testato che però non viene più aggiornato
- Il fatto che non tutte le API Microsoft Windows siano state sviluppate per essere gestite tramite il .NET Framework
Ad esempio un’applicazione potrebbe avere la necessità di utilizzare una procedura dell’ambiente Microsoft Excel e, dato che la libreria Excel non è scritta in .NET, sarà necessario, per accedere ad essa, fare ricorso al cosiddetto Component Object Model (COM).
.NET e COM sono due ambienti di esecuzione molto differenti e l’unico modo di condividere funzionalità tra di loro è quello di utilizzare l’interoperatività, conosciuta anche come Interop. Prima dell’avvento del .NET Framework il COM era il framework di riferimento attraverso cui gli sviluppatori interagivano con i sistemi operativi Windows.
Una cosa che i due ambienti hanno in comune è il fatto che per utilizzare librerie esterne occorre prima importarle. Dopo averle importate è possibile dichiarare e istanziare oggetti appartenenti a tali librerie nello stesso modo degli oggetti appartenenti al framework stesso. E’ possibile importare nuovi tipi sia da codice, sia impostando i giusti riferimenti in Visual Studio.
Il .NET Framework fornisce un grande supporto per l’interoperatività COM, inclusa la possibilità di importare librerie di tipi. Il meccanismo che consente la comunicazione tra l’ambiente di esecuzione .NET e un componente COM è denominato Runtime Callable Wrapper (RCW). Tale componente gestisce la maggior parte degli aspetti riguardanti la comunicazione tra i due ambienti, inclusi gestione degli eventi e gestione delle interfacce.
Diversamente dai componenti .NET, i componenti COM devono essere registrati prima di essere utilizzati. Dopo la registrazione questi componenti necessitano di essere importati tramite Visual Studio o tramite lo strumento Type Library Importer. Se, ad esempio, vogliamo utilizzare una particolare libreria o DLL, denominata utility.dll, dobbiamo aprire il prompt dei comandi DOS e registrare tale componente scrivendo ed eseguendo la seguente riga
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Vediamo adesso i due modi in cui è possibile importare tale DLL. In Viual Studio, all’interno del progetto in cui si vuole utilizzarla, basta cliccare con il tasto destro del mouse sul nodo References, scegliendo l’opzione Add Reference
Nella finestra che si apre apriamo la scheda COM, selezioniamo la DLL registrata e clicchiamo su OK
Per importare invece la DLL tramite lo strumento Type Library Importer occorre avviare il prompt dei comandi di Visual Studio
Impostare il percorso della DLL e scrivere la seguente linea
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Utilizzo progetti COM
Vediamo adesso come utilizzare gli oggetti COM. Dopo l’importazione vista in precedenza utilizzare un oggetto di questo tipo è virtualmente equivalente ad utilizzarne uno puramente .NET. Nell’esempio che seguirà utilizzeremo il componente COM Adobe PDF Reader per aprire e leggere un file .pdf.
Avviamo Visual Studio e creiamo una nuova applicazione Windows Form, dandogli il nome che preferiamo. Dal menù Tools selezioniamo l’opzione Choose Toolbox Items
La finestra di dialogo che compare presenta diverse schede, tra cui COM Components. Selezioniamo quest’ultima scheda, spuntiamo il componente Adobe PDF Reader e clicchiamo su OK
Nella scheda General del Toolbox comparirà il componente appena aggiunto
Trasciniamolo e rilasciamolo sul form principale
L’istanza dell’oggetto viene denominata automaticamente axAcroPDF1. A questo punto all’interno del metodo Load del form inseriamo il seguente codice
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
dove dovete sostituire la stringa TitoloDocumento con il titolo effettivo del vostro file .pdf.
Come è possibile constatare si tratta di un’operazione alquanto semplice. Il motivo di tale semplicità è che quando una DLL viene importata viene parallelamente creato un .NET Assembly. Dal punto di vista del programmatore non è possibile capire da chi sia generato il codice e quindi il suo utilizzo risulta semplice come l’utilizzo dei vari componenti .NET.
Occorre fare alcune considerazioni sulla gestione delle eccezioni. La classe System.Exception occupa l’apice della gerarchia di gestione delle eccezioni e tramite un oggetto appartenente a tale classe è possibile gestire qualsiasi errore si verifichi in un’applicazione .NET. Questo a partire dalla versione 2.0 del .NET Framework, perchè in precedenza la suddetta classe poteva gestire solo eccezioni di tipo CLS (Common Language Specification) e gli errori generati dagli oggetti COM non appartengono a tale tipologia, quindi non venivano gestiti.
A partire dalla versione 2.0 del .NET Framework è stata introdotta la classe RuntimeWrappedException, appartenente al namespace System.Runtime.CompilerServices. Tale classe espone diverse proprietà ereditate dalla classe System.Exception, tra cui la proprietà WrappedException. Tale proprietà è molto importante perchè in .NET quando si verifica un’eccezione non di tipo CLS il linguaggio di esecuzione crea un’istanza di tale classe e imposta tale proprietà sull’oggetto che genera l’eccezione.
Questo comportamento viene gestito automaticamente ed è completamente trasparente al programmatore
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Sebbene dunque sia possibile utilizzare gli oggetti COM occorre precisare che in generale essi presentano alcune limitazioni:
- Mancanza di supporto per i membri statici
- Impossibilità di passare parametri ai costruttori
- Limitazioni all’ereditarietà
- Scarsa portabilità su sistemi differenti da Windows
In questo articolo ci siamo soffermati sull’utilizzo di componenti COM all’interno dell’ambiente .NET ma bisogna sottolineare che può avvenire anche il processo inverso e probabilmente in un prossimo articolo vedremo come fare ciò.
mrwebmaster.it
Formattazione testo mia.