DLL HELL

Sottotitolo: Ovvero perché AMO dotNET!

Premesse: é capitato in 3 o 4 casi che l'installazione di un nostro programma realizzato in VB6 desse dei problemi su alcuni computer con windows XP.

2 spiegazioni: Una classe "Creator" ha un metodo che instanzia un'altra classe "Classe" (cosa non si faceva prima di avere i costruttori parametrici!).

Qualcosa come:

Dim C as Object

Set C = CreateObject("CreatorLib.Creator")

Dim IC as LibInterfacce.IClasse

Set IC = C.CreaClasse(ParamaLong, ParamADODBConnection, ParamDefinitoInLibInterfacce)

 

Se Creator viene creata in late binding (sì, purtroppo dobbiamo!) abbiamo:

Errore n° 13 Tipo non corrispondente

Se viene creata con early binding:

Errore n° 5 Chiamata di routine o argomento non valido

Per mesi ho dato la colpa al versioning della nostra DLL contenente le interfacce che fanno collaborare le varie parti di tale programma, visto che in precedenza ci aveva fatto sputare sangue ad ogni nuova versione. Oggi ho scoperto che mi sbagliavo!

La chiamata accetta 3 parametri: un long, una ADODB.Connection, ed una classe definita nella libreria delle interfacce (come sopra).

In realtà si tratta della versione di ADO!

Come l'ho scoperto? Chiamando C.CreaClasse senza assegnare il risultato ad alcuna variabile.

Tutti i miei progetti usavano ADO 2.6

e sulla macchina c'erano installati ADO 2.6, 2.7 e 2.8

Guardando sul mio computer di sviluppo ho visto che ho anche un ADO 2.80

Ho scaricato l'ultima versione di ADO ed installata sul PC del cliente... E, come nelle favole, vissero felici e contenti con il programma funzionante fino al prossimo INFERNALE problema di DLL COM!

 

Print | posted on giovedì 18 novembre 2004 18:35

Comments have been closed on this topic.