Newsgroup: it.comp.lang.delphi
Titolo: da DBS(7?) a D5 [Volume Shadow Copy Service]

I soliti incidenti con la mia immonda ignoranza, specie quando capita di 
interfacciarsi a qualche dll di sistema.
Volendo fare qualche test del SCS di XP/2003 da un programma delphi ho 
provato a compilare i sorgenti di un articolo di delphi magazine 121 
sotto D5pro ma ho riscontrato qualche problemino.
A parte qualche riferimento a librerie inesistenti in D5 (come MSXML) 
che risolvo semplicemente cambiando o eliminando qualche pezzo di codice 
mi trovo in crisi qua:
---8<-----------------
Type
   BSTR = PWideChar;
   VSS_COMPONENT_TYPE = (VSS_CT_UNDEFINED, VSS_CT_DATABASE, 
VSS_CT_FILEGROUP);
   PVSSCOMPONENTINFO  = ^VSS_COMPONENTINFO;
   VSS_COMPONENTINFO  = Packed Record
     &Type                   : VSS_COMPONENT_TYPE;
---8<-----------------
Che ci fa qui il segno _&_ come prefisso a type?
Se a qualcuno interessa l'argomento shadow copy il progetto di esempio è 
nella directory vss di questo archivio 
http://www.thedelphimagazine.com/disks/dmag121.zip
-- 
For a list of all the ways technology has failed to improve the quality 
of life, please press three.
(C) Alice Kahn

     &Type                   : VSS_COMPONENT_TYPE;
Type e' una parola riservata in Delphi (o in Object Pascal, o come cavolo
decideranno di chiamarlo): se vuoi usare una variabile con quello stesso 
nome
devi prefissarla con quel carattere.
Citazione dall'help:
To access a user-defined symbol with the same name as a reserved word, you 
must
use the ampersand (&) override operator:
Ciao
ACSH
-- 
Il più grande sbaglio nel progettare software
a prova di stupido è sottostimare l'enorme
ingegnosità degli stupidi. 

 use the ampersand (&) override operator:
Questa non la sapevo. Oltretutto non ne capisco l'utilità, a parte 
offuscare il codice.
-- 
Jax

"Jax" ha scritto nel messaggio

Puo' sempre capitare di usare qualche "codice esterno"
(DLL, COM, .NET ecc.) che non rispetti le convenzione
di Delphi.
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio 

 Type e' una parola riservata in Delphi
Ok, ok, almeno questo dovrei saperlo ;-) e quanto all'uso del carattere 
& per referenziare un simbolo corrispondente ad una parola riservata lo 
avevo già trovato nell'help ma a quanto pare questo funziona in D5 solo 
dentro un blocco asm... end{asm} altrimenti il compilatore lamenta la 
presenza di un carattere illegale nel sorgente, & appunto... l'help non 
si spreca ma guarda caso fa un unico esempio proprio in assembly.
Infatti se provo qualcosa del genere, per la serie leggibilità, funziona:
---8<-----------------------------------------
function wasteCPU(x: integer): integer;
const eax = 0;
begin
  asm
   MOV EAX, x
   ADD EAX, &EAX
   MOV result, EAX
  end;
end;
---8<-----------------------------------------
Qualche idea su come aggirare il problema?


 spreca ma guarda caso fa un unico esempio proprio in assembly.
In TurboDelphi questo codice
type
   VSS_COMPONENTINFO  = Packed Record
     &Type                   : string;
   End;
oppure
  TForm1 = class(TForm)
  private
    private
    &Type : string;{ Private declarations }
 { Private declarations }
  public
    { Public declarations }
  end;
compila senza problemi, mentre in D7 danno errore,
ergo il compilatore e' stato modificato per trattare
quel "caso particolare" in maniera completa (non solo
nel codice ASM) in qualche versione successiva.
Azzarderei, dalla introduzione del supporto per .NET
Quindi, per D5, la vedo molto male...
