Newsgroup: it.comp.lang.visual-basic
Titolo: [VBScript] Oggetti come parametri di funzioni/metodi ?

Ciao a tutti,
in questi ultimi giorni ho avuto il mio primo scontro con VBScript.
Per ora vinco io 1 a 0, ma con un barbatrucco :-(
La situazione:
ho una DLL ActiveX (fatta in VB6 SP3) che devo usare da VBScript (lato
client, NO ASP).
La DLL (e sue ancelle) e' in un file CAB creato con il Package & Deployment
Wizard.
Ora, a parte il fatto che la DLL/CAB non e' firmata (ma e' proprio
necessario, anche se e' sullo stesso PC?), una delle classi nella DLL ha un
metodo che ha come paramentro un riferimento ad un altra classe, sempre
della DLL:
'Class oggetto1
Sub metodo(ByRef o As oggetto2)
ho candidamente tentato di chiamarlo con:
oggetto1.metodo(oggetto2)
ma Internet Explorer 5 si arrabbia dandomi un errore di "invalid type" (o
qualcosa del genere, non ricordo bene).
N.B. se come parametro passo Nothing:
oggetto1.metodo(Nothing)
pare non ci siano errori di tipo, ed il metodo viene effettivamente chiamato
(tranne poi andare in errore perche' si aspetta un oggetto, non Nothing ;-).
Vorrei sapere da chi e' un po' esperto di VBScript lato-client:
e' possibile chiamare metodi che abbiano degli oggetti custom come
parametri?
Se si puo', come?
TIA
P.S. per chi e' curioso di sapere quale barbatrucco ho usato: ho
semplicemente aggiunto un metodo con parametri di tipo semplice, che
internamente si ricrea l'oggetto e richiama il metodo originale. Orribile.
--
Roal Zanazzi

 ha scritto nel messaggio
news:8qn01f$t1v$1...@lacerta.tiscalinet.it...



Certo, potrei ribaltarla come un calzino, ma preferirei non farlo (e'
l'oggetto critico di un sistema piuttosto complesso).
--
Roal Zanazzi

 (tranne poi andare in errore perche' si aspetta un oggetto, non Nothing ;-).
[SNIP]
Non so se come soluzione ti piacera' ma la mia versione del "barbatrucco" e'
questa:
Aggiungere alle classi che interagiscono con lo script (nel mio caso ASP ma
credo sia ininfluente) dei metodi "costruttori" per le classi private e a volte
anche per alcuni oggetti base (tipo Collection, non ho trovato il modo di
crearla direttamente in VBScript, se non ricorrendo al "parente" Dictionary)
nel tuo esempio diventa qualcosa di simile a:
'Nella DLL
Public function NuovoOggetto2() as Oggetto2
set NuovoOggetto2=New Oggetto2
End function
'Nello script
set Oggetto2=Oggetto1.NuovoOggetto2
Oggetto1.metodo(Oggetto2)
Mi rendo conto che cosi' devi mettere mano alla Dll ma secondo la mia esperienza
e' un sistema che, in prospettiva, "paga".
Ciao
--
Luca Dormio
luca....@tin.it
luca....@sig-la.com


Sei sicuro che cosi' funziona?
Non ho provato, ma penso sia lo stesso problema che ho io attualmente, con
la differenza che io faccio (piu' o meno):
set Oggetto2=Oggetto3.NuovoOggetto2
Oggetto1.metodo(Oggetto2)
N.B. notare l'Oggetto3.
--
Roal Zanazzi

 N.B. notare l'Oggetto3.
Hai ragione, sono stato affrettato...
Dunque, sono andato a controllare per bene il mio codice incriminato e, fermo
restando tutto il discurso sui "costruttori" ecc.., ho verificato che il mio
"Oggetto1.Metodo(parametro)" in effetti prende in input un Variant (e funziona),
ho provato a ricompilare con un parametro "As Oggetto2" e *non funziona*... a
questo punto ho modificato lo script cosi':
set Oggetto2=Oggetto3.NuovoOggetto2
Oggetto1.metodo((Oggetto2))    'doppia parentesi, forza il casting a Variant
e *funziona* sia con la dichiarazione "parametro as Object" sia con quella
esplicita "parametro as Oggetto2".
A quanto pare il barbatrucco "definitivo" sembra essere quello della doppia
parentesi, il che conferma la tua ipotesi che in VBScript i parametri Object non
siano utilizzabili direttamente.
In effetti quando abbiamo cominciato a fare componenti per pagine ASP ci eravamo
orientati per la regola "VBScript=Variant" ma abbiamo affrontato la cosa
smanettando molto sul componente e poco sullo script... 'sta cosa delle
parentesi non l'avevo mai considerata prima e penso che tornera' molto utile
anche a me!


 se non me ne dovevi, te ne devo una io (a te la scelta). ;-)
Grazie... no, non ti dovevo nessuna birra :-))) ma un giorno di questi mi
rimetto in pari con qualche domandina su Delphi...
