Ciao a tutti,
la mia applicazione, scritta in VB6, utilizza una DLL scritta in C, sviluppata in ambiente Dev-C++.
La DLL viene posta nella cartella di sistema appropriata in base al tipo di sistema operativo dal programma di setup.
La funzione di update del programma rinomina la DLL da aggiornare secondo lo schema [nome DLL]-[versione].OLD e pone nello stesso percorso la nuova DLL.
Al di la' della bonta' di questo sistema di aggiornamento, sul quale accetto suggerimenti, il problema che ho riscontrato (un paio di volte su una base di alcune centinaia di utenti) e' il seguente: su sistemi Windows 7 (sia a 32 che 64 bit) l'applicazione fallisce al momento di richiamare una funzione contenuta nella DLL con errore di runtime 48 ("File non trovato: mylib.dll"), mentre la DLL e' in realta' tranquillamente dove deve essere.
In realta' questo errore, piu' che alla mancanza della DLL, dovrebbe essere legato a un errore nel suo caricamento.
Il problema infatti persiste anche copiando la DLL direttamente nella cartella in cui si trova l'eseguibile o eliminando manualmente la DLL corrente ed eventuali vecchie versioni e ripristinandola.
Il problema si risolve disinstallando l'applicazione, riavviando il PC e reistallando l'applicazione, soluzione tentata come "ultima spiaggia" e che sfugge dalla mia comprensione, visto che la DLL non e' ActiveX e quindi non e' interessata da registrazioni e simili.
In rete ho trovato alcuni suggerimenti che non si applicano al mio caso o che comunque ho applicato senza successo:
- compilare la DLL in versione release anziche' debug quando si utilizza VC++ 2008
- utilizzare lo stesso name casing per i nomi delle funzioni sia nella DLL che nelle istruzioni "Declare" nel codice VB
L'unico aspetto che ho tralasciato, ma che dovrebbe essere ininfluente, e' che nella clausola "Lib" della istruzioni "Declare" ho indicato solo il nome della libreria ("mylib") senza includere l'estensione ("mylib.dll").
Il problema sembra limitato e facilmente aggirabile, ma vorrei sapere se e' stato riscontrato anche da altri e quale e' secondo voi il suo reale motivo, in modo da poterlo risolvere con cognizione di causa.
Grazie,
Riccardo