Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Proprio non riesco a capire... [un pò lungo]

Salve a tutti,
ho un problema che mi sta facendo ammattire. Ho scritto con VB una DLL che
contiene tutta una serie di funzioni (alcune scaricate da internet, altre
scritte ex-novo) che riguardano la ListView. Questa DLL "parte" con la Sub:
Public Sub AssociaControlli(ListView As Object, Container As Object,
Optional TextBox As Object)
Set m_Lv = ListView
Set m_Co = Container
Set EdBox = TextBox
End Sub
Con:
Dim m_Co As Object
Dim WithEvents m_Lv As ListView
Dim WithEvents EdBox As TextBox
Ovviamente il tutto con VB6 SP5 quindi con Microsoft Windows Common Controls
6.0. Compilo la DLL, la inserisco tra i riferimenti del mio progetto,
dichiaro la classe (Dim ProList As New clsListViewPro) e quindi uso
tranqullamene la AssociaControlli. Ora seguitemi bene. Nello stesso
progetto, con lo stesso codice, con gli stessi riferimenti la DLL non
funzica sempre!!! Nella maggior parte dei casi va, altrimenti mi da un
errore run-time "tipo non corrispondente" dove fino a 10 sec prima
funzionava! Se eseguo il debug della DLL vedo che l'errore in questione me
lo da nella sub AssociaControlli all'istruzione Set m_Lv = ListView... Senza
modificare niente di niente, ricompilo la DLL sostituiendo la vecchia e
funzica tutto di nuovo... Questo fino alla prossima volta che nessuno riesce
a prevedere quando sarà! Non capisco proprio quale sia il problema... Non è
la prima volta che mi capita: avevo lo stesso problema con un'altra DLL non
mia che riguardava una TreeView e associava il tutto utilizzando lo stesso
identico metodo. Mi sapete per caso illuminare? Perchè si comporta così?
Capirete che non posso lasciare l'applicazione così... Che faccio se
improvvisamente all'utente finale gli capita una cosa del genere? Gli
ricompilo la DLL??? E poi non dovrebbe comportarsi in questo modo.... Ho
provato anche a dichiarare le variabili della sub (ListView, Containier,
TextBox) come control ma è la stessa identica cosa.... Come quello che sono
realmente (ListView, Form e TextBox) non si possono dichiarare perchè il VB
non lo permette... Che faccio?
GRAZIE PER AVER LETTO FINO A QUI!
Antonio Mirarchi

 Dim WithEvents m_Lv As ListView
Non so se c'entri, ma prova a dichiarare m_Lv cosi':
Dim WithEvents m_Lv As MSComctlLib.ListView
a volte vb fa pasticci tentando di utilizzare il vecchio listview 
ComctlLib.ListView
ciao
	maxx
P.S. Anche questo non c'entra niente, ma non potevi usare dei nomi 
diversi da quelli degli omonimi controlli per le tue variabili?
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 diversi da quelli degli omonimi controlli per le tue variabili?
Li ho usati così per comodità... Tanto che importa?
Antonio Mirarchi

 Li ho usati così per comodità... Tanto che importa?
Vedi thread di Lupo [?]Stranezza ADO/Espodama...
ciao
	maxx


... Ora seguitemi bene.
Non ho una risposta alla tua questione, ma io delle DLL ho capito questo:
-Io la DLL non la dichiaro mai (Create, New e compagnia bella), la metto
sempre fra i riferimenti.
-Se compili la DLL su un'altra macchina e poi la duplichi (e registri) su
un'altra, alcune cose non vanno.
-In fase di test preferisco mettere l'intero modulo (BAS) corrispondente
alla DLL e togliere la stessa dai riferimenti.
-Per il resto, mai avuto problemi di sorta.

 alla DLL e togliere la stessa dai riferimenti.
Però così dovrei rinunciare alla comodità di avere un ProList.dll che
inserisco in tutte le app che la necessitano, ti pare?
Antonio Mirarchi

 Ma io sto parlando della stessa macchina!
Allora non so che dirti, se non di guardare il codice che puň provocare i
problemi.

 problemi.
Oh, lo sto facendo, credimi... E' da stamattina che non faccio altro! :-(
Grazie comunque di tutto
Antonio Mirarchi


Prova ad eliminare le associazioni tardive, dove puoi, e, se i nomi dei
parametri sono veramente quelli che hai scritto, cambiali per evitare
conflitti, il VB è molto sensibile ai nomi in conflitto e si comporta in
modo molto "random", per esempio:
 Public Sub AssociaControlli( lwListView As ListView, objContainer As
Object,
 Optional txtTextBox As TextBox)
Prova un po cosi...
Ciao
Giovanni Chieli

> Prova ad eliminare le associazioni tardive, dove puoi,
E come?
Antonio Mirarchi

  Optional txtTextBox As TextBox)
Listview al posto di Object, TextBox al posto di Object
Questo ovviamente presuppone che la routine venga utilizzata solo con 
listview e textbox e non con altri oggetti.


> Listview al posto di Object, TextBox al posto di Object
Non si può fare in VB! Non posso mettere in una classe una public sub con i
parametri che dici tu!
Antonio Mirarchi


No, se è  pubblica non si puo' usare nemmeno  "As Control", allora non ti
resta che provare a cambiare i nomi dei parametri passati.
Un' altra cosa che potresti provare a modificare è la priorità del
riferimento alla tua classe (nel progetto che la utilizza) in modo che sia
in cima alla lista, e provare...
Un'altra cosa, se "container" è l' oggetto che contiene il controllo insieme
a cui viene passato, prova ad eliminarlo e ad utilizzare la prorpietà parent
per ottenere l' oggetto contenitore  non dovrebbe significare niente ma in
questi casi anomali bisogna andare a tentativi no?
Ciao
GC

 
Hai regione, ho scritto una stupidata. :-(


 questi casi anomali bisogna andare a tentativi no?
Si, questa mia sembra una buona idea...
Antonio Mirarchi

 In che modo?
Apri il progetto client, vai al menu Progetto, riferimenti, selezioni la tua
dll e cambi la priorita con le frecce a dx della lista dei riferimenti fino
a farla arrivare in cima all' elenco.
ciao
GC