Confessions of a Dangerous Mind

Brain.FlushBuffer()
posts - 176, comments - 234, trackbacks - 93

Le "magie" di VB6

Oggi ho dovuto mettere le mani su una classe VB6 (non scritta da me). All'interno di questa classe ho trovato un codice che mi ha lasciato davvero perplesso: ne faccio un esempio

Private Sub Command1_Click()
 CalcolaValore UCase("stringa qualsiasi")
End Sub

Private Sub CalcolaValore(buffer() As Byte)

   'Qui faccio qualcosa...

End Sub

Di primo acchito, mi sono domandato come un codice di questo tipo potesse funzionare; dovrebbe dare mismatch error non appena si entra nella Command1_Click. Invece il codice che ho scritto funziona!! Provate a rimuovere la chiamata UCase() e a lasciare solo la stringa e il codice smetterà di funzionare. Possiamo anche provare con Trim ed LCase e vedremo che il nostro codice continuerà ad andare alla grande. Da qui la domanda... ma cosa contiene buffer? Beh, contiene un'array di Byte che rappresenta la nostra stringa (trasformata con ucase o lcase o trim) in formato UNICODE!!

Ora, il significato di questo post qual'è? Quello di meditare ancora una volta come .net ci abbia liberati da queste "magie" che potevano indurre in errori molto difficili da individuare.

 

Print | posted on giovedì 2 febbraio 2006 20:40 |

Feedback

Gravatar

# Re: Le "magie" di VB6

sinceramente, non capisco cosa c'entra...
la tua perplessità deriva dal fatto che ti aspettavi un comportamento, ed invece ne hai un altro. Anche in .NET ci sono cose che magari ti lascerebbero perplesso allo stesso modo, o stupito ad una prima occhiata, ma una certa logica ce l'hanno sicuramente. Magari oscura, come in questo caso, però c'è.
02/02/2006 23:45 | Igor Damiani
Gravatar

# re: Le "magie" di VB6

Ciao Igor, ti assicuro che se tu avessi letto con un pò di attenzione il codice che ho scritto, prima di fare commenti, avresti colto il senso della mia perplessità.
Non mi aspetterei mai un comportamento come quello che ho evidenziato, nè in VB6 nè tantomeno in .net. La funzione UCase(), nel caso non lo sapessi, ritorna una stringa, e _non_ un'array di Bytes... e il parametro della funzione CalcolaValore è un array di bytes.
A questo punto la logica oscura... beh, l'hai capita solo tu.
03/02/2006 11:25 | Davide Senatore
Gravatar

# re: Le "magie" di VB6

hai ragione, ho programmato per 10 anni con VB6 e non so cos'è UCase$(), aspetta, guardo MSDN.....
ROFTL!!!! :-D

prima di rispondermi, guarda i forum di UGI, o quelli MS, e vedrai quante domande vengono fatte ogni giorno su comportamenti anomali (o presunti anomali) di .NET. Ogni linguaggio/piattaforma ha le proprie "stranezze".
03/02/2006 11:32 | Igor Damiani
Gravatar

# re: Le "magie" di VB6

inoltre, guarda questo tip del mio mito Francesco Balena
:-)

"Process string characters using Byte arrays"
http://www.devx.com/vb2themax/Tip/18251
03/02/2006 11:36 | Igor Damiani
Gravatar

# re: Le "magie" di VB6

Beh, non credo che stiamo a fare a gara a chi ha programmato di più in VB6... altrimenti ti avrei staccato "abbondantemente" :-)
L'unica cosa che mi ha lasciato perplesso nel primo commento che hai lasciato è che non è per nulla costruttivo. Io ho riportato nel mio blog un'esperienza di comportamento di un linguaggio che ritengo interessante...nulla di più.
03/02/2006 11:42 | Davide Senatore
Gravatar

# re: Le "magie" di VB6

Ok, chiudo qui lo scambio rispondendo semplicemente alle tue domande:
1) Ho gestito stringhe come array di bytes sin dai tempi di C/C++
2) Il fatto che il mio post non sia utile a nessuno è un tuo parere, che rispetto... ma perdonami, tu non ricopri per me una posizione di giudizio, per cui permettimi di non condividere il tuo punto di vista.

Senza polemica e senza offesa. Buona giornata!
03/02/2006 12:18 | Davide Senatore
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET