Usare controlli COM in .NET

20080617-com.png
I “vecchi” controlli realizzati usando dal tecnologia Microsoft COM (Component Object Model), hanno sicuramente cavalcato gli incubi di molti programmatori, fino a creare quell’universo di dolore parallelo chiamato DLL Hell, ben noto a chi ha sviluppato con Windows 95, 98, ME, NT, 2000 e forse forse anche XP. Insomma, prima dell’introduzione del .NET Framework.

Purtroppo però non sembrano del tutto morti e sepolti, anche perchè hanno dalla loro uno streminato partimonio di software binario scritto proprio in COM, e la loro riprogettazione per .NET si puo’ rivelare un spesa non banale da affrontare.

Ecco perchè risulta utile, delle volte, realizzare dei wrapper che permettano di utilizzare questi controlli anche all’interno di applicazioni .NET, procrastinando magari il giorno in cui veranno sostituiti del tutto e realizzando nel frattempo, grazie alla OOP, un buon layering delle proprie applicazioni, cosi’ quel giorno non fara’ poi tanta paura, Murphy permettendo. Ma anche la possibilita’ di usare fiammanti controlli .NET in vetuste applicazioni COM-enable ha il suo fascino, potendo cosi’ aggiornarle un pezzo alla volta, riutilizzando poi buonaparte del lavoro fatto.

Le tecniche di programmazione che studiano queste tematiche vanno sotto il nome di “.NET COM Interoperability”, ed hanno lo scopo di realizzare dei Runtime-Callable Wrappers (RCW: COM -> .NET) e dei COM-Callable Wrappers (CCW: .NET -> COM). Viene anche affrontato come gestire gli eventi e i dati di ritorno generati dal controllo inglobato.

How to call a Visual Basic .NET or Visual Basic 2005 assembly from Visual Basic 6.0: come usare controlli .NET in applicazioni COM, quelle classiche di Visual Basic 6.

.NET Interoperability: COM Interop: un’esauriente trattazione di Brian Long sulla creazione di RCW e CCW.

COM Interop in VB.NET: La sezione sulla COM INterop di VB.Net Heaven, con diversi articoli interessanti.

Visual Basic & .NET Journal, edizione italiana, numeri 69 e 71 del 2006.

Troubleshooting .NET Interoperability: ovviamente problemi e casi particolari ci sono sempre!

BUG: “InteropServices.COMException” error message occurs when you pass ByRef Parameters by using late binding: il titolo e’ gia’ abbastanza esaustivo.

IntelliSense Features Do Not Appear in Visual Basic 6.0 for .NET COM Interop Components : ancora qualche suggerimento per risolvere problemi comuni.

Improving Interop Performance: consigli utili su come miglioare le performance quando si ha a che fare con RCW, occupazione di memoria, early e late bindin.

Buon reciclo di codice, a questo punto!

Leave a Reply