Newsgroup: it.comp.lang.visual-basic
Titolo: Metodi e Proprieta' di un oggetto

set x = new Collection
Ecco, a questo punto vorrei fare un ciclo che mi estrapoli dalla Type
Library tutti i metodi e proprieta' di "x".
Ovviamente con "x" di tipo generico. Per esempio potrebbe essere un
instanza di ADODB.Connection, o qualunque altra classe di una .DLL
registrata nel sistema.
Nessuno di voi ha la minima idea di come fare?
--
C'ya, 
  |
  |
'/|\'
\\O//
//"\\
'\ /'
________________________________________TagLine___
"Quanti Angeli danzano sulla punta di uno spillo?"

In VB no, ma se ci riesci (senza trucchi tipo persistenza di un oggetto tuo)
ti pago una cena.
----------------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------------

ti pago una cena.
Gia' mi piacerebbe riuscirci, la cena sarebbe un optional. ;)
Cosa intendi quando dici "senza trucchi"?


>Cosa intendi quando dici "senza trucchi"?
Nel senso che se l'oggetto è tuo (o comunque supporta la persistenza), puoi
usare la propertybag per salvarne le proprietà in un buffer che poi puoi
rileggere, ma questo non significa accedere alla tlb etc. Se però ti può
servire, è un metodo che si usa.


Cercando su MSDN ho scoperto due articoli interesanti che permettono di
ricavare le caratteristiche di un oggetto.
1) per ricavare i dati direttamente da un file ocx o da una dll active-x
FILE: Programmatically Retrieve the Members of a DLL Class
ID: Q172988
seguendo le indicazioni dell'articolo sono riuscito ad estrarre le costanti
dichiarate, le classi e le interfaccie messe a disposizione dall'Active-X
anche se sto ancora analizzando in effetti i vari oggetti messi a
disposizione dalla tlbinf32.dll credo si possano ottenere praticamente tutte
le informazioni disponibili con il "visualizzatore oggetti (F2)".
2) per ricavare i dati da un oggetto caricato in memoria :
PRB: CallByName Fails to Return the Correct Error Information
ID: Q194418
no fatto delle prove ma ho un problema in quanto la funzione richiede un
oggetto ma quando passo un oggetto ad una sub in realtà quasi sempre viene
passata la proprietà di default e non ho trovato il modo di utilizzarla.
Ad esempio se io creo una Sub
    sub Informazioni (obj as object)
e poi la richiamo con
    infomazioni (text1)
il programma mi segnala tipo incongruente in quanto viene passata la stringa
text1.text.
Sapete forse come si può porre rimedio ?
Era mia intenzione fare un programma che, una volta caricati tutti i
componenti disponibili, mi permettesse, trascinando i controlli su una form,
di prelevasse le caratteristiche dei controlli per vedere le differenze tra
quelli simili messi a disposizione in librerie diverse (tipo il
CommandButton standard e quello delle Forms 2.0).
Grazie.

Walter,
sei stato davvero bravino a trovare i riferimenti a questa dll (non ne avevo
sentore, lo ammetto). Direi che si tratta di qualcosa di veramente utile
(almeno per chi ha questo genere di problemi - mi sa che devo una mezza cena
a qualcuno, anche se la soluzione non è full-VB). Fra l'altro sul sito MS
c'è anche un help dettagliato di TLBINF in formato chm. Non sono invece
riuscito a scoprire le norme per la redistribuzione (la DLL è installata dal
setup di VB e non è supportata da MS).
Per quanto riguarda il tuo problema, non mi è molto chiaro in quali
circostanze si verifichi.
Tu dici che se fai
    Sub Info(obj as Object)
    ...
    End Sub
e chiami la funzione con Info(Text1) viene passata la proprietà Text di
Text1. A me non pare che sia così. Se chiedi il valore di obj all'interno di
Info è chiaro che ti viene passata la sua proprietà di default (cioè Text)
ma l'oggetto intero viene passato per riferimento alla funzione (infatti
puoi anche vedere il valore di obj.Enabled p.es.).
Quindi suppongo che il problema sia diverso. Forse quello che lamenti accade
quando passi obj ad una funzione esterna (della TLI)? Mi pare che però
funzioni anche in questo caso. P.es.:
Sub Info(Obj as Object)
   Dim ii As InterfaceInfo
   Set ii = InterfaceInfoFromObject(Obj)
   Debug.Print ii.Guid
End Sub
Chiamando Info(Text1) viene correttamente stampata la GUID dell'oggetto.
Puoi chiarirmi meglio il problema, magari con un esempio?


...
Data la tua risposta ho provato finchè ho visto che il problema era di
aggiungere la keyword call nella chiamata alla sub altrimenti mi segnalava
appunto un problema di "tipo diverso".
Infatti, dichiarando come variant il parametro della mia sub se chiamo
MiaSub (text1) nella funzione il valore di variant è string = text1,
call MiaSub (text1) il valore di variant è il controllo text1.
PS. Per quanto riguarda la cena aspettiamo che si organizzi un altro
incontro tra i frequentatori del NG così potremo regolare la faccenda :).