Newsgroup: it.comp.lang.delphi
Titolo: domanda molto stupida ma leggete!

Devo compilare un sw scritto da altri in Delphi3.
Io lo compilo in Delphi5.
Ho un errore del tipo:
'Constant expression violates subrange bounds'
ad una linea di codice in cui il valore -1 e' assegnato ad una variabile di
tipo dWord.
La cosa si ripete per piu' linee.
Ora vi chiedo:
- sono nuovo del Delphi ma l'errore che mi si presenta mi sembra piu' che
sensato visto che un dWord definisce un range 0..4294967295.
 Non e' cosi'?
- l'errore potrebbe essere introdotto dal salto di versione Delphi3 -->
Delphi5? Mi sembra un po strano. Ancora piu' strano mi sembra che
l'originario softwarista riuscisse a compilare senza errori...
- la disabilitazione del range checking a cosa e' relativa?
Grazie a chiunque voglia chiarirmi le idee
Ciao
Maurizio

  Non e' cosi'?
Si, è così!
Se dichiari le variabili come Integer 
(-2147483648
..
2147483647
 signed
32-bit), dovresti risolvere
il problema, però dipende dai tipi di dati che queste variabili devono
gestire.
Un integer e una dword sono sempre a 32 bit, quindi il numero di valori
possibili è sempre lo stesso... sta a te poi come "gestirli"... se queste
variabili devono contenere valori
non superiori a 
2147483647
 allora puoi tranquillamente dichiararle come
integer, altrimenti
potresti fare così :
const estremoinferiore = x; // dove x, se ho capito bene, nel tuo caso è -1
estremosuperiore = -x;
type TipoInteger =  estremoinferiore..4294967295 - estremosuperiore;
Spero di esserti stato d'aiuto!!
Ciao e riscrivi se hai difficoltà!!  Davide DG

- la disabilitazione del range checking a cosa e' relativa?
Dovrebbe essere per gli array e anche per gli overflow, come in questo caso.
Al massimo prova a sostituire i DWord con integer
Ciao!                {MSX}

 l'originario softwarista riuscisse a compilare senza errori...
La domanda è tutt'altro che stupida: io mi sono ritrovato con un bel po' di
problemucci nei miei vecchi programmi...(io uso D3, alcuni miei amici [con
cui sto portando avanti progetti] usano D4...).
Già da D4 c'è stata una "piccola rivoluzione" fra i tipi interi... (penso +
che altro per orientarsi sempre + verso i 32 bit [e mantenere degli standard
per COM]).
Non vorrei sparare castronerie ma (visto che la dimensione cmq non è
cambiata [sempre 32bit]) penso che prima il compilatore lo definisse come un
Intero e che quindi, se assegnavi un valore negativo ad un DWORD, questo
venisse interpretato cmq come un integer...
Probabilmente adesso l'hanno proprio definito "di suo"...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply


Hai azzeccato il problema. Nelle versioni prima della 4 il DWord era
definito come Integer. Ora invece e' definito come Cardinal (che prima non
esisteva), ovvero intero a 32 bit senza segno.
Basta quindi sostituire il -1 con $FFFFFFFF se questo ha un senso,
altrimenti Maurizio deve trovare soluzioni alternative.
Ciao,
Stefano

 altrimenti Maurizio deve trovare soluzioni alternative.
Buono a sapersi! Finalmente potrň tornare ad usare la mia cara
MessageBeep(-1) con MessageBeep($FFFFFFFF) ;-)
Ciao, grazie :-)
--
(Ż`·.¸¸.·´Ż`·.¸¸.-> Andrea <-.¸¸.·´Ż`·.¸¸.·´Ż)
