Ho scritto un articolo su questo argomento molto a pochi anni fa:
What is an untyped parameter?
parametri non tipizzate sono utilizzati in alcune situazioni; il metodo TStream.Read
che si chiede in merito alle corrispondenze più ravvicinate con la procedura Move
di cui ho scritto. Ecco un estratto:
procedure Move(const Source; var Dest; Count: Integer);
La Move
procedura di copia dei dati da una variabile arbitraria in qualsiasi altra variabile. Deve accettare fonti e destinazioni di di tutti i tipi, il che significa che non può richiedere alcun tipo singolo. La procedura non modifica il valore della variabile passata per Source
, in modo che la dichiarazione del parametro utilizzi const
anziché var
, che è il modificatore più comune per i parametri non tipizzati.
Nel caso della TStream.Read
, la fonte è il contenuto del corso d'acqua, in modo da non passare che come parametro, ma la destinazione è il parametro Buffer
indicato nella domanda. Puoi passare qualsiasi tipo di variabile che desideri per quel parametro, ma ciò significa che devi stare attento. È il tuo lavoro, non quello del compilatore, per garantire che il contenuto dello stream sia davvero un valore valido per il tipo di parametro che fornisci.
Leggi il resto del mio articolo per ulteriori situazioni in cui Delphi utilizza parametri non tipizzati.
fonte
2009-12-18 15:38:23
Il parametro 'Buffer' non è un puntatore. Tratta come un puntatore e le cose andranno in crash. È il * buffer effettivo * che si desidera modificare, non un puntatore a un buffer. L'indirizzo del parametro è l'indirizzo del buffer. –
Sono stato corretto –