Newsgroup: it.comp.lang.visual-basic
Titolo: funzionamento IsEmpty con valori long ??

non ho ben capito il funzionamento della funzione IsEmpty(espressione) in
riferimento a variabili che non siano di tipo Variant. In particolare mi
serviva verificare all'interno di una routine se una variabile di tipo Long
fosse stata inizializzata o meno. A questo scopo pensavo di utilizzare,
appunto, la funzione IsEmpty .....
Dim i As Long
If IsEmpty(i) Then ....
Nel testare questo statement credevo che dovesse risultare sempre vero non
avendo attribuito alcun valore iniziale alla variabile i. La funzione
restituisce true, invece, se al posto del tipo Long assegno alla variabile
il tipo Variant.
Ma allora IsEmpty, funziona solo con valori di tipo Variant ?? come faccio a
determinare se una variabile di tipo Long non č stata inizializzata ??
grazie.
--------------------------------
Inviato via 
http://usenet.libero.it

Qiando inizializzi una variabile numerica questa viene automaticamente posta
uguale a 0, quindi IsEmpty, giustamente, ritorna False.
Ciao, Luca.

fosse stata inizializzata o meno. 
Visual Basic inizializza sempre i Long a 0, nel momento stesso in cui
li dichiari.
-- 
ciao, hal

 (
http://msdn.microsoft.com/library/en-us/automat/htm/chap6_7zdz.asp
)
il variant č davvero quella "cosa" lě??????
miiii quanto ci nasconde il vb :-P
    assa.
--
gosclient: 
http://members.xoom.it/gosclient/
join the mailing list: 
http://groups.yahoo.com/group/gosclient/join
icq: #215876894

miiii quanto ci nasconde il vb :-P
E soprattutto, ecco un motivo per usarlo il meno possibile
(il variant, non il vb ;-)
-- 
ciao, hal

 E soprattutto, ecco un motivo per usarlo il meno possibile
Praticamente, solo in _alcuni_ casi di gestione array o dove, veramente, è
necessario che i parametri siano variant-abili (es.: lettura valori dal
registry).
ciao
ugo

 registry).
Es. i valori letti da un DB (il campo Value di un Filed che ovviamente non
puň essere tipizzato) oppure indici per le collection (che possono essere
stringhe o numerici).
Cioč, generalizzando solo in quei casi dove per forza di cose non sai con
che tipo di dati stai trattando.
--
Math Parser, VB.Framework : 
http://www.neodatatype.net
Sito Comune               : 
http://www.it-lang-vb.net

     assa.
Non č proprio cosě :)
hal ha dato la struttura scritta in C.
in VB appare decisamente piů semplice:
Public Type VARIANT
    iVarType As Integer
    dwUnused1 As Integer
    dwUnused2 As Long
    dwData1 As Long
    dwData2 As Long
End Type
Praticamente iVarType ti dice di che tipo č il dato contenuto.
E' quello che va a vedere la VarType() e i vari vbString, vbLong, ecc altro
non sono che i valori che formano la maschera di bit per iVarType.
dwUnused1 e dwUnused2 non sono usati (servono solo a rubarti 6 byte per ogni
istanza :P)
dwData1 contiene i primi 4 byte del dato se ad es. č un Long o un Double
oppure il puntatora al dato se questo č di tipo "byRef" come stringhe o
array.
dwData2 contiene i secondi 4 byte del dato per dati di che hanno da 5 a 8
byte (es i Double).
Queste cose le puoi facilmente verificare giocando un attimo con la
CopyMemory().
Potrebbe (e sottolineo *trebbe*) essere utile ad es. per swappare i valori
tra due grossi array contenuti in variant, anzichč creare un terzo array di
appoggio e quindi consumare memoria e tempo macchina nel copiare tutti gli
elementi 3 volte, scambiare solo il dwData1 dei due variant.
Ciao
