[VB6-VB.NET] Add-in per l’interoperabilità dei form

Per chi non conoscesse l’add-in gratuito “Interop Forms Toolkit 2.0“, voglio sottolineare una sua caratteristica fondamentale: permette di estendere un progetto VB6, permettendo di utilizzare dei form di Visual Basic.NET direttamente da un’applicazione VB6.

Questo agevola sicuramente chi ha sviluppato un’applicazione “enorme” in VB6 e non si può permettere di perdere molto tempo nell’effettuare la migrazione dell’intero progetto sotto .NET. In questo modo viene garantita la produttività, almeno a breve termine, con una facile estensione del progetto iniziale con nuove funzionalità che VB.NET offre nativamente.

[VB.NET-C#] Convertitore di codice VB.NET-C#

Se avete la necessità di convertire delle porzioni di codice o intere classi da VB.NET a C# e viceversa, potete utilizzare questa utile pagina gratuita:

http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

Per utilizzarla, prima scegliete il linguaggio (VB.NET o C#) e inserite o incollate il codice. Poi premete il pulsante “Convert to…” e aspettate: poco dopo avrete il codice convertito nell’altro linguaggio!

[VB6] Code Advisor: uno strumento per la migrazione da VB6 a VB 2005

Premessa
Pur programmando da diversi anni con VB e con VBA (soprattutto con Access) riesco comunque a cogliere le opportunità che si prospettano con i nuovi linguaggi che implementano il paradigma della programmazione orientata agli oggetti (OOP). Nei miei studi universitari ho avuto anche a che fare con JAVA e quindi anche in questo caso con la programmazione ad oggetti (nota: C# ha una sintassi molto simile a quella di JAVA). Ho studiato, ho sperimentato e mi sono impegnato parecchio anche nelle mailing list nel cercare di capire questo nuovo modo di programmare.

Nonostante tutto l’interesse, tutta la passione e tutto l’impegno profuso per padroneggiare questo nuovo mondo, non sono ancora riuscito ad avere la “situazione in pugno”. Mi sento ancora come una vecchia locomotiva che non riesce ad andare in pressione e quindi ad iniziare il suo viaggio lungo i binari sicuri della programmazione ad oggetti.

A questo punto non resta che esplorare altre possibilità e cioè utilizzare degli strumenti che almeno mi permettano di capire quali sono le parti di codice che fanno parte del “passato” VB6 e che non hanno una corrispondenza diretta nel nuovo VB.NET.

VB6 Code Advisor: download e installazione
Prima di tutto è necessario scaricare dal sito Microsoft questo “add-in” per l’IDE di VB6. L’indirizzo esatto da cui è possibile scaricarlo è il seguente:

http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=a656371a-b5c0-4d40-b015-0caa02634fae

Una volta scaricato il file “Code Advisor for Visual Basic 6_ITA.msi” è possibile avviarlo per far partire l’installazione. Le prime opzioni potranno essere tutte confermate così come sono.

Appena comparirà la seguente schermata, invece, consiglio di scegliere l’opzione “Completa“, perché così installerete anche la documentazione e gli altri componenti necessari per estendere “Code Advisor“.

Infatti “Code Advisor” è un prodotto estendibile con nuove regole per avere ulteriori consigli sul codice che non erano previsti nella versione iniziale del prodotto. Alcune di queste nuove regole sono pubblicate anche su articoli MSDN.
Dopo un altro paio di click di conferma, avrete l’add-in installato. A questo punto facciamo partire VB6.

Nell’IDE di VB6 troviamo già un paio di differenze: nel menu “Aggiunte” c’è il nuovo menu “Code Advisor” e tra le barre strumenti ce ne sarà una nuova di nome “Code Advisor per Visual Basic 6“. Entrambe presentano alcune voci identiche e quindi siamo liberi di utilizzare l’una o l’altra modalità, a nostra preferenza.
Le voci sono:

  • Aggiungi FixIt
  • Rimuovi FixIt
  • Trova FixIt successivo
  • Filtra regole FixIt
  • Definizione ambito (con le scelte “Ambito: progetto attivo” oppure “Ambito: file attivo“)

Nel menu, poi, c’è anche la voce “Visualizza report FixIt” che però al momento è disattivata, non avendo ancora utilizzato le funzionalità di questo add-in.

Gettiamo carbone nella caldaia della locomotiva…
A questo punto apriamo un progetto VB6, uno qualsiasi, per fare una prima prova “al volo” delle funzionalità offerte dall’add-in.

Per iniziare l’analisi del nostro progetto, scegliamo la voce “Aggiungi FixIt“. Diventerà subito visibile una barra di avanzamento per farci capire a che punto è l’analisi del codice. Al termine dell’analisi, nel lato destro della barra degli strumenti di “Code Advisor” comparirà un pulsantino con l’unica funzione di indicarci quanti sono i “FixIt“, cioè i suggerimenti inseriti nel codice (nel mio caso sono stati 13, molti dei quali dello stesso tipo).

I suggerimenti (FixIt) sono inseriti come commenti nel codice, secondo il seguente schema:

  'FIXIT: questo è un suggerimento

Premendo il pulsante “Rimuovi FixIt“, tutti i suggerimenti saranno rimossi dal codice come se non fossero mai stati inseriti.

Il pulsante “Trova FixIt successivo” serve a spostarsi “in avanti”, da un suggerimento all’altro. Questa funzionalità permette di trovare subito i suggerimenti senza dover guardare tutto il codice.

Il pulsante “Filtri FixIt” svolge un’importante funzione: apre una finestra di dialogo dalla quale è possibile selezionare sia la versione VB.NET alla quale vogliamo migrare, sia i singoli suggerimenti, uno per uno, che vogliamo attivare o disattivare. Riporto qui di seguito un’immagine che può chiarire il concetto.

Il pulsante “Visualizza Report FixIt“, che è diventato attivo dopo l’aggiunta dei suggerimenti, apre il browser Internet per mostrare un report piuttosto dettagliato e contenente:

  • alcune statistiche del progetto (numero regole, numero componenti, numero problemi, ecc.);
  • tutti i “problemi” riscontrati, con il nome del modulo che contiene il codice, la relativa sezione e la riga dove si trova il “problema”;
  • l’elenco dei componenti che hanno riportato almeno un problema;
  • l’elenco delle regole applicate con il conteggio delle occorrenze di ognuna.

Il report si presenta in questa forma:

Il pulsante “Guida in linea di Code Advisor” apre appunto la guida in linea, mentre l’ultimo pulsante “Definizione ambito“, che può assimere due diversi valori (“Ambito: progetto attivo” oppure “Ambito: file attivo“) specifica appunto se le regole vanno applicate all’intero progetto o al solo file attivo. In quest’ultimo caso, i suggerimenti vengono applicati solo al file attivo e anche il “Report” viene prodotto solo sulla base dei risultati ottenuti dall’analisi del file attivo.

Una nota a margine: utilizzando questo add-in, improvvisamente mi è comparsa questa finestra di avviso di Norton AntiVirus:

IMMAGINE 4

Norton AntiVirus ha interpretato le azioni di questo script come quelle di uno “script maligno”. Ritenendo che non ci fossero particolari dubbi sul fatto che fosse il NAV ad aver avuto un “abbaglio”, ho scelto la voce “Autorizza questo script“, ho confermato e ho quindi potuto continuare il lavoro 😉

Come ultima parte di questo articolo e ad esemplificazione dei suggerimenti che questo add-in produce, ne riporto uno auto-esplicativo:

  Utilizzare Option Explicit per impedire la creazione implicita di variabili di tipo Variant.

Conclusione
Non è tra gli obiettivi di questo articolo elencare e spiegare per filo e per segno tutti i “problemi” riscontrati nell’esperimento. L’obiettivo, infatti, era quello di fornire uno sprone all’uso di uno strumento che può aiutarci nel capire meglio come migliorare il nostro codice e i nostri progetti per prepararli adeguatamente nell’ottica di una migrazione a VB.NET / VB 2005.

Conversione di soluzioni da Visual Studio 2005 a 2008 e viceversa

Ho fatto un piccolo esperimento per verificare la compatibilità delle soluzioni sviluppate in Visual Studio 2005 e nella nuova versione 2008. La questione può essere interessante e importante specialmente per chi sviluppa ancora con la versione 2005 e vuole condividere i progetti con chi invece si è aggiornato alla nuova versione. Ancora più importante, in questo caso, è poter condividere il progetto “all’indietro”, perché spesso abbiamo la possibilità di effettuare una conversione “dal vecchio al nuovo” ma non “dal nuovo al vecchio”.

Viaggio di andata: dalla versione 2005 alla versione 2008

In questa prima fase, ho preso una soluzione sviluppata con la versione 2005 e l’ho aperta con la versione 2008.

Visual Studio 2008 ha immediatamente avviato la procedura di conversione e, dopo alcuni semplici passi, ha mostrato un messaggio informativo nel quale indicava che le soluzioni basate sul Framework .NET 2.0 restano invariate.

A dimostrazione di ciò, il report delle operazioni di conversione (file UpgradeLog.xml) ha riportato che non è stato convertito alcun file, ma sono stati adeguati solo il file della soluzione (estensione .sln) e il file del progetto (estensione .proj).

Viaggio di ritorno: da 2008 a 2005

Ho provato anche l’operazione contraria: ho creato una nuova soluzione con Visual Studio 2008 (utilizzando il Framework .NET 2.0) e l’ho aperta con Visual Studio 2005.

Il risultato è negativo: Visual Studio 2005 ha indicato che è impossibile aprire il file di soluzione selezionato perché è stato creato con una versione più recente dell’applicazione.

Sembrerebbe quindi impossibile aprire il progetto, ma non è detta l’ultima parola. Infatti, ho già specificato che il nuovo progetto Visual Basic 2008 è stato creato sulla base del Framework .NET 2.0, quindi non dovrebbero esistere incompatibilità con la precedente versione di Visual Studio.

Ho quindi aperto il file della soluzione con il classico Notepad (Blocco note) e ho modificato semplicemente questa riga:

Microsoft Visual Studio Solution File, Format Version 10.00

facendola diventare

Microsoft Visual Studio Solution File, Format Version 9.00

Dopo aver salvato il file di soluzione modificato, ho riprovato ad aprirlo con Visual Studio 2005: questa volta la soluzione si apre senza alcun problema e premendo F5 viene anche regolarmente eseguita.

Nota

La procedura di conversione descritta può funzionare solo se vengono utilizzate funzionalità presenti sia in Visual Studio 2008 che in Visual Studio 2005, ecco perché il nuovo progetto è stato creato sulla base del Framework .NET 2.0. Se avessimo utilizzato, per esempio, il Framework .NET 3.5, potremmo aver introdotto delle funzionalità non presenti nella versione 2005 e quindi incompatibili.