Ciao a tutti, scrivo per chiedervi aiuto relativamente allo sviluppo di una DLL in VB6.
Si tratta di una progetto per il quale avevo già postato una richiesta nel forum, Oregon mi aveva dato una dritta grazie alla quale avevo completamente risolto (link).
Adesso sono passato alla fase di deployment/distribuzione e sono spuntati fuori nuovi problemi.
Ho scritto una DLL (che per comodità possiamo chiamare INTERMEDIA.DLL) che ha un reference a MSWINSCK.OCX (Winsock è linkata come reference non aggiunta come component).
La DLL ha un solo metodo che sfrutta alcune funzioni di Winsock per chiamare una pagina html, eseguire il parsing del testo ricevuto e restituire una sottostringa opportunamente elaborata.
Dal momento che tale DLL deve essere utilizzata da altri sviluppatori in altri ambienti, ho realizzato uno standard exe per fare i test (per comodità possiamo chiamarlo CLIENT.EXE). L'exe è stato realizzato in modo isolato rispetto alla DLL; intendo dire che è contenuto in un progetto separato e distinto e che ha tra i reference INTERMEDIA.DLL.
Grazie all'aiuto di Oregon (), tutto funziona perfettamente nell'ambiente di sviluppo, sia se eseguo il codice dentro Visual Studio sia se compilo CLIENT.EXE e INTERMEDIA.DLL e li eseguo con Visual Studio chiuso (naturalmente in questo secondo caso devo registrare INTERMEDIA.DLL prima di eseguire CLIENT.EXE).
Il problema nasce quando provo ad eseguire i test in una macchina diversa da quella di sviluppo (si tratta di un pc con win xp e null'altro installato).
Naturalmente gli step per il deployment sono identici a quelli eseguiti nella workstation di sviluppo:
- copia dei due file compilati (CLIENT.EXE e INTERMEDIA.DLL)
- copia di MSWINSCK.OCX nella cartella C:\WINDOWS\system32\ (il pc di deployment non ha la libreria)
- registrazione di MSWINSCK.OCX con regsvr32
- registrazione di INTERMEDIA.DLL con regsvr32
- esecuzione di CLIENT.EXE
Tutti gli step tranne l'ultimo vengono eseguiti senza ricevere alcun errore, l'esecuzione di CLIENT.EXE produce il seguente errore:
"Run-time error '429': Activex component can't create object"
Di seguito alcune prove che ho fatto per provare a capire dove potrebbe essere l'errore:
Ho scritto uno Standard EXE che chiama direttamente i metodi di Winsock e ha come reference solo MSWINSCK.OCX. Compilato, copiato ed eseguito nel pc di deploy. Funziona tutto senza errori.
Ho scritto uno Standard Exe e una DLL di prova che espone un solo metodo che esegue la somma di due interi. L'eseguibile ha come reference la dll, istanzia l'oggetto, chiama il metodo per la somma e visualizza il risultato della somma. Compilato, copiato ed eseguito nel pc di deploy. Funziona tutto senza errori.
In Visual Studio ho provato due differenti modi di aggiungere il reference alle librerie:
- registrare le DLL nel sistema, aprire il menù Project->References e scegliere le DLL dalla lista delle DLL disponibili;
- aprire il menù Project->References, fare click sul pulsante "Browse", navigare il file system fino al punto in cui è salvato il file della DLL, selezionare il file della DLL.
Tutti e due i metodi funzionano correttamente nella workstation di sviluppo ma non funzionano nel pc di deploy.
Grazie in anticipo
Ciao