2012-01-19 16 views
7

Ho un progetto VB6 di grandi dimensioni in cui molte variabili non hanno un tipo definito esplicitamente, quindi vengono automaticamente impostate sul tipo Variant. Trovare tutti quelli a mano è un compito enorme, quindi c'è un modo per automatizzare questo? In VB.Net è possibile disabilitare tutto l'uso automatico delle varianti usando 'Option Strict', ma VB6 non ha questa opzione.VB6: disabilitare le varianti

In questo momento ho aggiunto DefByte A-Z ad ogni classe, che rende il tipo predefinito "Byte" invece di "Variant". Questo mi permette di catturare un sacco di variabili non definite in fase di esecuzione, non appena viene assegnato un valore maggiore di 255. Ma non è ancora completamente infallibile.

Esiste un modo più affidabile per rilevare tutte le variabili non definite?

+0

Non puoi semplicemente cercare la parola "Variante" nell'intera soluzione? – pikzen

+1

@pikzen: in VB6 se non si specifica il tipo, si ottiene Variant. – MartW

+1

Inoltre, se si ha una linea come "Dim x, y, z AS Integer", solo z sarà un numero intero. xey sarà Variant. Questo comportamento è cambiato con VB.NET, per fortuna. – MartW

risposta

2

Non penso che esista un metodo "infallibile" per rilevare tutte le variabili non definite. Tuttavia, l'istruzione Option Explicit richiederà che tutte le variabili siano dichiarate nel modulo in cui appare l'istruzione, quindi il compilatore contrassegnerà tutte le istanze in cui non è il caso. C'è anche un'opzione IDE che aggiunge automaticamente questa dichiarazione all'inizio di ogni nuovo modulo.

+0

Il codice già utilizzato Option Explicit, grazie comunque! – Muis

+0

Se hai usato Option Explicit nel tuo codice, perché stai facendo questa domanda? –

+0

@MarkBertenshaw - 'Option Explicit' verifica le variabili non dichiarate. Non controlla se le variabili dichiarate sono varianti che è ciò che l'OP richiede –

5

Ho usato Aivosto's Project Analyzer per raccogliere cose come questa. C'è una versione demo che ti darà una buona idea su cosa può fare.

+0

concordato. Il software non è costoso e si ripaga molto rapidamente in termini di tempo risparmiato e problemi evitati. –

4

Decora i tuoi moduli con Option Explicit.

Questa frase deve essere visualizzata nella parte superiore di ciascun modulo creato. Quando fatto, causerà un errore del compilatore quando si incontrano variabili non dichiarate.

Option Explicit non sarà, tuttavia, impedire dichiarazioni di variabili di tipo-meno, come

Dim i 

La variabile i sarà dichiarato come variante, e nessun errore di compilatore sarà gettato anche con Option Explicit definito.

+0

Il codice già utilizzato Option Explicit, grazie comunque! – Muis

2

Utilizzare l'editor di testo di un programmatore (uso UltraEdit) e effettuare una ricerca di massa tra le directory di origine del progetto.

Inizia con la ricerca di Variant (ovviamente), anche se probabilmente lo hai già fatto.

successivo usa una normale ricerca tipo di espressione di qualcosa sulla falsariga di:

*Dim [a-zA-Z][a-zA-Z0-9_]*\p 

Questo dovrebbe ottenere lo scenario Dim x senza il finale As DataType.

Utilizzare *Dim [a-zA-Z][a-zA-Z0-9_]*,.* per trovare il tipo di scenari Dim a, b, c As Integer.

Usa *Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.* per gli scenari a sfera dispari come Dim a As Integer, b, c As Long

Ripetere le pervenga di cui sopra con Private e Global invece di Dim e che dovrebbe ottenere quasi tutto.

+1

Anche 'ReDim' dovrebbe essere incluso, perché VB non richiede prima un 'Dim'. E non funziona con gli array, i parametri di funzione, i valori di ritorno, ecc. Quindi, mentre è un buon sforzo, presenta alcune lacune;) – Muis

+0

Ho usato solo Redim con gli array. Ho pensato al problema dei parametri, ma onestamente non sono abbastanza fluente con le espressioni regolari per sbatterne uno per ciascuno. Lo lascerò a qualcuno più ambizioso di me :) – tcarvin

+0

Non è possibile utilizzare Public e Private per dichiarare un campo? Hai bisogno di espressioni regolari anche per quelli. – MarkJ