Newsgroup: it.comp.lang.visual-basic
Titolo: DLL net e COM

Ciao a tutti,
ho un problemino con una classe contenuta in una DLL scritta con VB2008 e la 
possibilita' di esportare verso Com la classe stessa.
Sto lavorando su tale classe, ne sto modificando i metodi (in realta' c'e' 
una funzione che si aspetta una stringa e restituisce.. qualche cosa ^__^ ).
Ho impostato le proprieta' "visibile a Com" e "Classe Com" a True, ho 
specificato negli attributi la ClassID, InterfaceID ed EventsID a cui ho 
assegnato, come stringhe, i valori restituiti dalla utility Guidgen e alla 
fine ho compilato la dll.
Questa DLL e' fisicamente in un percorso di rete (per ora mi serve li).
se provo ad aprire un nuovo progetto VB6, posso impostare un riferimento 
alla dll creata, ma se provo a creare un oggetto del tipo esposto dalla 
classe, (dichiarata pubblica e con una Sub New () pubblica ), mi viene 
restituito l'errore che la classe non supporta l'interfaccia.
Boh... vabbe', deregistro la libreria tramite regasm, (ho rpvato parecchie 
combinazioni.. solo il nome della dll, nome della dll e /tlb, tutte e due 
insieme ), la riregistro, anche qui con varie combinazioni , cioe' nome dll, 
nome dll / tlb, tutti e due, ma il risultato cambia di poco...
A volte dice che la classe non supporta l'interfaccia, a volte esce fuori un 
errore di automazione: file non trovato.
Come posso fare per scrivere, registrare ed utilizzare correttamente una dll 
net tramite com?
Se poi mi accorgessi che i miei metodi hanno bisogno di una revisione, ad 
esempio una funzione che anziche' restituire un intero deve restituire una 
stringa, come faccio per evitare di far esplodere tutto?
Ciao e grazie.... Maurizio

Piccolo aggiornamento...
se compilo la DLL in locale, sembra funzionare tutto.
Spego meglio:
Apro un nuovo progetto, lo porteggo sotto source safe ma naturalmente lavoro 
con la copia in locale.
Imposto nelle proprieta' di compilazione, di compilare il componente in una 
cartella di rete, tipo \\server\dll\... ecc.
Non va, anche se in vb6 posso aggiungere il riferimento alla mia DLL e vedo 
che il percorso di questa e' effettivamente quello di creazione (in rete).
Se faccio la stessa cosa indicando come percorso di compilazione un percorso 
locale (tipicamente il bin\release) allora funziona tutto.
Non c'e' modo, secondo voi, di compilare il tutto in rete?
Grazie e ciao... Maurizio 

 restituito l'errore che la classe non supporta l'interfaccia.
Non vedo perché una dll in rete dovrebbe darti un problema di automazione. 
L'errore è più facilmente dovuto a quel "qualche cosa" restituito dalla 
libreria: ricordati che il fatto di rendere una classe .net visibile come 
.com non rende visibili i tipi che VB6 non ha modo di trovare, perciò se la 
tua funzione pubblica ritorna un tipo .net ottieni di sicuro un errore del 
genere.
Stefano

 [...]
...
Boh, non saprei dire, pero' la stessa dll, senza cambiare una riga di 
codice, semplicemente pubblicata in locale, funziona benissimo, si registra, 
si deregistra, si aggiorna.. insomma, fa esattamente il suo dovere.
Se la pubblico in rete, niet!
Boh.
Ciao e grazie ancora... Maurizio

 Se la pubblico in rete, niet!
Avevo capito che in locale ottenevi comunque un errore di automazione. Se in 
locale invece funziona, allora mi sembra che l'unica possibilità sia che non 
hai i privilegi per eseguire la dll sull'altro pc (perché non hai diritti 
sul pc, perché una policy lo impedisce, perché hai SourceSafe attivo, etc.)
Fai conto che io uso da tanti anni una subst per simulare un disco (visto 
quindi come unità di rete) dove ho TUTTE le mie dll (alcune centinaia) in 
vari linguaggi e non ho mai avuto problemi. L'escamotage (che non 
raccomando) è dovuto al fatto che in origine le dll stavano su un server NT 
condiviso da un team di lavoro e anche lì tutto funzionava.
Stefano