Newsgroup: it.comp.dotnet
Titolo: TryCast, CType, DirectCast e congeneri

Ora, il problema è in apparenza banale (visto che nemmeno 
esisteva in basic più antichi), nasce dalla necessità di 
serializzare strutture, arrays, strutture contenenti arrays 
ed arrays di strutture etc, insomma roba VALUE-Type.
Ho fatto già varie ricerche, con esiti che non mi son 
piaciuti molto.
Ad es. ho visto usare il marshalling DA/A blocchi di memoria 
non gestita, globalHalloc o vattelapesce, IntPtr etcetera.
Ma non vedo la necessità stringente di allocare altra 
memoria, copiarci i miei dati, e ricopiare ancora.
Poi ho visto usare le funzioni di serializzazione
BinFormatter.Serialize e BinFormatter.Deserialize, ma solo 
con STREAM.
Sto quindi chiedendomi se un qualche genere di cast, dai 
tipi aggregati e strutturati che dicevo a byte(), e 
viceversa, siano costrutti con un minimo di senso.
Purtroppo se faccio uno static_cast in C++ so cosa 
aspettarmi, mentre quando mi muovo in 
VB.NET
 non ho idea di 
come venga gestita una reference, e in che misura si possa 
castare ad altro.
Se vi siete mai trovati a voler gestire con l'immediatezza 
del vecchio basic l'I/O su file dei tipo 
strutturati/aggregati anche con .NET, come avete risolto ?
Pensate che ci sia qualche modo di castare semplicemente il 
tipo di dati e imbrogliare ?
Preciso una cosa importante : faccio di tutto per mantenere 
il layout di queste strutture compatto e non sparso (array 
di dimensioni fisse, stringhe di lunghezza fissa e attributi 
<serializable()>, poi non so se alla fine le strutture siano 
impaccate o sparse ugualmente ... in questo caso mi rendo 
conto che, SE fungesse, un CAST sarebbe devastante.
Quindi ne sorge una sottodomanda : se ci sia un modo per 
tenere compatta, monolitica, la rappresentazione di memoria 
di questi tipi utente (ribadisco, senza pezzi dinamici 
dentro, se no pare dura anche in teoria).
ciao
grazie in anticipo
Soviet

 Soviet
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @ 
http://milestone.topics.it
whynot [ at ] topics [ dot ] it

 caso più semplice e quindi un byte[]
ciao e grazie
Soviet


 deserializzazione da disco a memoria
Questo è il binary formatte (+esempio):
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter.aspx
ma ce ne sono altri come XmlSerializer, DataContractSerializer, ...
Ciao
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/


Ci vo' a dare un'occhiata, grazie. Quand'anche non mi 
servissero per il caso specifico, in effetti sto imparando 
cose varie che magari mi tornano utili in altro momento.
ciao e grazie
Soviet


 assorbita da questo rispetto dei tipi fondamentali.
A parte che, tecnicamente, cio' che dici non e' corretto (questioni di
endianness e simili ce l'hai anche e proprio a partire dai tipi
primitivi, e le tue eventuali strutture dati si pongono sempre ad un
livello piu' alto).
Comunque, il punto fondamentale che a mio modesto avviso rischia un
po' di sfuggirti e' che .Net uguale mondo managed, cioe' comporta un
approccio alla programmazione piu' ad alto livello. Paragoni e ancora
di piu' *paradigmi* estrapolati da quelli del C/C++ per esempio, sono
del tutto fuori luogo...
Per usare al meglio .Net occorre conoscere bene il framework, la sua
specifica ed i suoi vincoli e limiti. Quindi anch'io ti suggerirei di
guardare meglio la documentazione sulla serializzazione/
deserializzazione: primo perche' quello e' l'approccio "corretto"
in .Net di pensare e poi risolvere certi problemi, e poi, non del
tutto secondario, perche' molti dei tuoi dubbi e delle tue idee di
soluzione "piu' a basso livello" in realta' sono ingiustificati,
tecnicamente scorretti, e appunto derivano piu' che altro da una tua
mancanza di adeguata conoscenza del framework e dei suoi idiomi.
My 2c anyway, e ti invito amichevolmente a prenderla come una critica
positiva!
-LV

 altro momento.
Prego, ciao


 -LV

 Devi pensare la tua soluzione in modo diverso.
:-\
Non è molto il codice implicato che mi serve, in realtà. 
Solo la parte che interagisce col file fisico.
Per adesso sto mettendo delle pezze temporanee, ed ogni 
struttura e classe, dalla più infima, implementa suoi metodi 
omonimi CopyTo e CopyFrom, da/ad array di byte, e qualche 
routine su array per assemblare e disassemblare, o delega a 
quelle sottostanti nelle classi derivate.
Ma è stato molto tedioso, sono pomeriggi che faccio questa 
porcheria di serializzazione a mano.
Spero di trovare di meglio in quell'interfaccia che mi hai 
consigliato
ciao e grazie
Soviet

 ciao e grazie
Prego e buono studio allora ...
