Newsgroup: it.comp.lang.visual-basic
Titolo: [?] e' davvero necessario registrare le dll?

in seguito al post di lord di qualche giorno fa ed in seguito ad un
problemino "logistico" che ho avuto di recente ho fatto qualche prova.
ok, forse i miei programmi non utilizzano tante cose esterne, pero' ho
voluto prendere il mio programma piu' complesso e l'ho copiato in una
macchina dove avevo appena installato win98 e *nient'altro*.
naturalmente, l'eseguibile compilato in vb non funzionava: mi chiedeva
msvbvm60.dll.
ok, preso il file e copiato nella directory dell'eseguibile. e
nient'altro. lancio l'eseguibile e non funziona: mi chiede altra dll
--che non ricordo--.
ok, preso il file e copiato nella directory dell'eseguibile. e
nient'altro. lancio l'eseguibile e non funziona: mi chiede i common
controls, poi non ricordo quali altre diavolerie, comunque copiati
tutti quei dannati file nella directory del mio eseguibile questo e'
partito, felice come una pasqua.
quindi registrare le dll e gli ocx per me non serve.
poi m'e' venuto un dubbio: non e' che la prima volta che vengono usati
vengono registrati "automagicamente" oppure che resta qualche
riferimento a quelle dll/ocx nel registro?
la risposta e': no.
cancellato uno di quei files o spostato in altra directory
l'eseguibile non funziona piu'. cancellata l'intera directory e
ripartita la procedura da zero, tutto e' successo esattamente come
prima. anzi, ancora meglio: cancellata l'intera directory, ripercorsi
tutti i passi di cui sopra fino a far funzionare le cose e creata una
seconda directory per un altro dei miei eseguibili, manco quello
funzionava, quindi ogni eseguibile potrebbe avere la sua copia delle
*stesse* dll ed ocx nella sua directory che gli altri non se ne
accorgerebbero nemmeno.
ora, tutto questo inutile post serve a chiedere: a che serve
registrare le dll se i programmi funzionano anche copiandosele nella
*propria* directory cosi' ognuno si tiene la sua copia e visse felice
e contento?
ringrazio come sempre perche' stavolta ho fatto una dormita di quelle
atomiche :)
saluti.
-- 
Gianni Rondinini
Icem s.r.l.
Tel: 
+39 0545 78036
Fax: 
+39 0545 78727

 atomiche :)
Beato te.. qui da giorni non si chiude occhio. :(

> e contento?
Perche' normalmente non funziona cosi', il tuo e' stato un caso
particolare. Normalmente gli oggetti com *devono* essere registrati
perche' non si puo' supporre a priori che un sistema sia gia' stato
precedentemente "informato" sull'esistenza degli oggetti stessi.
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it


se la tua applicazione č divisa in piů eseguibili ed ognuno
fa riferimento alla stessa dll č piů logico avere una sola copia,
in un cartella comune e registrata nel registry
poi, tirando a caso :-))
pensando al tipo di threading utilizzato ci potrebbero essere problemi
di funzionamento se hai la stessa dll in piů posti, nel caso voglia usare
oggetti a threading singolo (magari qui ho scritto una bestemmia, ma mi č
venuta
cosě :-)))
-- 
bye BlackMagic
ICQ# 85485468

 precedentemente "informato" sull'esistenza degli oggetti stessi.
e poi dovrei avere decine di dll e ocx in ogni cartella , quando invece me
ne basta a vere una copia nel "System32" ?
Registrare serve appunto a questo, se la seconda applicazione di Gianni
avesse avuto le dll e ocx registrati , sarebbe partita !

 in seguito al post di lord di qualche giorno fa ed in seguito ad un
[cut su tutto]
In brevis:
Le DLL, che siano COM o che siano normali DLL non hanno bisogno di essere
registrate. Quando il programma ha bisogno di una DLL, la carica cercandola
a partire dalla cartella dell'eseguibile. Gli OCX devono essere registrati.
Questo perche' DLL normali e COM vengono istanziate dal programma per mezzo
del nome del file che le contiene. Gli OCX invece vengono istanziati tramite
il riferimento all'interfaccia/interfacce che espongono.
I motivi per cui si copiano tutti gli OCX e le DLL in una sola cartella
sono:
1) Una sola copia del file, meno spazio occupato su disco. (ci sono DLL che
hanno dimensioni maggiori della mia pancia dopo un motoraduno)
2) Se una DLL esiste in una copia unica ed e' registrata: se viene caricata
nello spazio di allocazione di un processo e un altro processo la richiede,
viene mappata la stessa DLL che gia' era caricata. Se la DLL non viene
registrata, ogni processo si carica la sua. Risultato, si occupa piu'
memoria.
3) Manutenzione: una DLL ha un bug; il bug viene corretto. Se la DLL non e'
centralizzata, bisogna che l'utente aggiorni ogni singola DLL sul disco.
Chiaramente poi, siccome il 90% dei programmatori del mondo non ha la piu'
pallida idea di quello che sta' facendo e fa' piu' casino che altro il piu'
delle volte avere DLL centralizzate diventa un problema, al punto che M$ con
Windows XP aveva incorporato un meccanismo per cui ogni software quando si
installa installa le sue DLL ed OCX nella cartella dell'eseguibile.
Meccanismo che non ho idea di che fine abbia fatto...
(solite misure antiprogrammatoreidiota come ad esempio il ventilato ritorno
ai file INI per evitare i soliti coglioni che scrivono teoremi dentro al
registro di sistema...)