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!