Interrompere Visual Basic 6 dal cambiare il mio involucro

Domanda molto semplice che è apparentemente imansible trovare una risposta decente a: Come posso fare in modo che Visual Basic 6 smetta di cambiare il mio ^ @ # * ing involucro variabile!?!

So che l’opinione generale di molti utenti di VB è che questa “caratteristica” è in realtà abbastanza utile, ma dubito che lo usino molto con qualsiasi sistema di controllo del codice sorgente. Questo è assolutamente INFIORANTE quando si sta cercando di collaborare a un progetto di qualsiasi dimensione significativa con molti altri sviluppatori. Se ignorati, produci migliaia di “modifiche” falsamente positive ai tuoi file (anche quelli senza modifiche effettive del codice!) Che inquinano la cronologia delle revisioni e rendono quasi imansible in alcuni casi individuare il cambiamento effettivo che ha avuto luogo.

Se non lo ignori (come il mio ufficio, dove siamo stati costretti a implementare una politica di “non modifica mai applicata”), spendi 5 volte il tempo in cui verrai normalmente su ogni commit, perché devi correggere attentamente le “correzioni di VB” “su ogni file, a volte ripristinando centinaia di righe per apportare un cambio di riga.

Sicuramente ci devono essere impostazioni, plugin, hack, ecc. Che possano rimuovere questa “caratteristica” indesiderata? Sono disposto a prendere qualsiasi metodo che riesca a ottenere finché non mi impone di scegliere tra pile di diff fantasmi. E per schiacciare un paio di lamentele: No, non posso distriggersre il rilevamento dei casi nel mio strumento diff, non è questo il punto. No, non possiamo solo apportare modifiche al caso a livello globale. Stiamo lavorando con centinaia di migliaia di LOC su cui stanno lavorando molti sviluppatori che coprono molti anni di sviluppo. Sincronizzazione che non è fattibile dal punto di vista aziendale. E, infine: No, non possiamo aggiornare a VB.net o portarlo in un’altra lingua (per quanto mi piacerebbe).

(E sì, sono solo un po ‘irritato al momento. Puoi dirlo? Le mie scuse, ma questo mi è costato tempo e denaro della mia compagnia, e non lo trovo accettabile.)

Ecco uno scenario del mondo reale e come lo abbiamo risolto per il nostro progetto 350k LOC VB6.

Stiamo usando Janus Grid e ad un certo punto tutte le linee di codice che hanno fatto riferimento alla proprietà DefaultValue di JSColumn sono passate a defaultValue. Questa è stata l’occasione per fare il debug sull’intero problema dell’IDE.

Quello che ho scoperto è che è stato appena aggiunto un riferimento a MSXML e ora l’IDE acquisisce la proprietà defaultValue di ISchemaAttributes prima del tipo di digitazione Janus Grid.

Dopo alcuni esperimenti ho scoperto che l’IDE raccoglie gli identificativi “registrati” nel seguente ordine:

  • Biblioteche / progetti di riferimento da Progetto-> Riferimenti nell’ordine in cui sono elencati

  • Controlli da Project-> Components (in ordine sconosciuto)

  • Codice sorgente

Quindi la semplice soluzione che abbiamo fatto è stata quella di creare una class / interfaccia fittizia con metodi che mantengano il nostro involucro adeguato. Dato che avevamo già un typelib a livello di progetto, facevamo riferimento a ogni progetto prima di qualsiasi altro typelib, questo era indolore da fare.

Ecco parte dell’IDL per la nostra interfaccia IUcsVbIntellisenseFix:

[ odl, uuid(<>), version(1.0), dual, nonextensible, oleautomation ] interface IUcsVbIntellisenseFix : IDispatch { [id(1)] HRESULT DefaultValue(); [id(2)] HRESULT Selector(); [id(3)] HRESULT Standalone(); ... } 

Abbiamo aggiunto molti metodi a IUcsVbIntellisenseFix, alcuni dei quali hanno preso il nome da enum che usavamo per l’ortografia e qualsiasi cosa volessimo risolvere. Lo stesso può essere fatto con una semplice class VB in una libreria comune (DLL ActiveX) a cui fa riferimento ogni progetto.

In questo modo il nostro codice sorgente ad un certo punto è stato convertito in involucro adeguato perché al momento del check-out l’IDE ha effettivamente fissato il rivestimento come per l’involucro IUcsVbIntellisenseFix. Ora non possiamo sbagliare l’enumerazione, i metodi o le proprietà anche se proviamo a farlo.

A seconda della situazione aggiunta

 #If False Then Dim CorrectCase #End If 

potrebbe aiutare.

SEMPLICE MODO: Dim ogni variabile nel caso che vuoi. Altrimenti, VBA lo cambierà in un modo che non è comprensibile.

 Dim x, X1, X2, y, Yy as variant 

in una subroutine cambierà TUTTI i casi con quelli Dim

Posso simpatizzare Fortunatamente, abbiamo il permesso di distriggersre la distinzione tra maiuscole e minuscole nel nostro strumento di controllo delle differenze di versione!

Sembra che la correzione automatica dei casi IDE VB6 cambi occasionalmente caso in dichiarazioni e riferimenti variabili, forse in base all’ordine in cui i moduli sono elencati nel file VBP? Ma l’IDE non ti dice che il file deve essere salvato. Quindi il problema si presenta solo quando hai salvato il file a causa di un’altra modifica. Abbiamo brevemente cercato di impedirlo controllando tutti i file in un progetto e impostando attentamente il caso, ma non è andato via.

Suppongo che potresti elencare i nomi delle variabili che sono interessati – i soliti sospetti sono nomi di una sola lettera come “I”, “X” e “Y”, forse perché sono usati in gestori di eventi standard come MouseDown. Quindi scrivi un componente aggiuntivo che cercherà tutte le dichiarazioni “Come” e imposterà il caso in alto. Esegui il componente aggiuntivo sui tuoi moduli prima di registrarli. Potresti essere in grado di triggersre il componente aggiuntivo per l’esecuzione automatica quando salvi in ​​VB6.

EDIT: Qualcosa a cui ho appena pensato: adatta la risposta di Fred . D’ora in poi, ogni volta che controlli in un file, aggiungi un blocco in alto per stabilire un caso canonico per i soliti sospetti. Se non altro, è più facile che ripristinare centinaia di righe a mano. Alla fine avrai questo blocco in ogni file e forse il problema si fermerà.

 #If False Then Dim I, X, Y ' etc ' #End If 

Ho standardizzato il caso attraverso il codebase, normalmente utilizzando gli esempi sopra ( Dim CorrectCase ), e rimuovendolo di nuovo. Ho quindi triggersto VB per salvare OGNI file, eseguendo una ricerca / sostituzione di maiuscole / minuscole di “Fine” con “Fine” (nessuna modifica funzionale, ma sufficiente per consentire a VB di salvare nuovamente). Una volta fatto, potrei quindi eseguire un singolo commit per standardizzare il caso, rendendo MOLTO più facile mantenerlo in un secondo momento.

In particolare per controllare il caso dei valori enum , esiste un componente aggiuntivo IDE VB6 che può essere utile. Enums sembra avere una versione leggermente unica di questo problema.

Come descritto nel link sottostante:

L’IDE VB6 ha un fastidioso capriccio quando si tratta del caso dei membri di Enum. A differenza di altri identificatori, l’IDE non applica il caso di un membro Enum come è stato dichiarato nel blocco Enum. Occasionalmente, un membro di Enum viene scritto manualmente per perdere il caso originale, a meno che un programmatore non lo abbia digitato con cura. …

Tuttavia, se un progetto contiene molti Enum e / o un Enum particolare ha un sacco di membri, redeclaring i membri in ciascuno di essi può diventare abbastanza noioso veloce. …

Rif: http://www.vbforums.com/showthread.php?778109-VB6-modLockEnumCase-bas-Enforce-Case-of-Enums

… carica e scarica il componente aggiuntivo secondo le necessità tramite la finestra di dialogo Gestore componenti aggiuntivi. L’utilizzo è semplice come selezionare l’intero blocco Enum, fare clic con il pulsante destro del mouse e scegliere la voce del menu di scelta rapida “Lock Enum Case”.

Non penso ci sia nessuno per farlo. L’IDE cambierà il caso del nome della variabile in qualunque esso sia quando viene dichiarato. Ma, onestamente, nel giorno in cui ho lavorato su numerosi progetti VB6 di grandi dimensioni e non ho mai trovato questo problema. Perché le persone nel tuo team di sviluppo cambiano costantemente le dichiarazioni delle variabili? Sembra che tu non abbia stabilito una chiara politica di denominazione delle variabili che applichi. Conosco il tuo turbamento, quindi senza offesa, ma potrebbero essere le tue politiche che mancano al riguardo.

Sfortunatamente, secondo questo thread SO , gli IDE VB6 alternativi sono difficili da trovare. Quindi, la soluzione migliore è risolvere questo problema tramite la politica. O passare a VB.NET. 🙂

Wow. Ho passato molto tempo a programmare in VB6 e non ho idea di cosa tu stia parlando. L’unica cosa a cui posso pensare è che intellisense cambierà la capitalizzazione dei nomi delle variabili per farli corrispondere alle loro dichiarazioni. Se ti lamenti di questo, dovrei chiedermi perché diavolo sono stati inseriti in un altro modo per cominciare. E se questo è il tuo problema, no, non c’è modo di distriggersrlo di cui sono a conoscenza. Ti suggerirei, in una volta, di controllare ogni file, assicurarti che i cappucci sulle dichiarazioni e gli usi delle variabili corrispondano tutti e ricontrollano.