Newsgroup: it.comp.lang.visual-basic
Titolo: [?] riferimento "dinamico"

lo so, il titolo non significa niente. Provo a spiegarmi
Poniamo che io debba fare un prog che "potrebbe" usare un certo riferimento,
o OCX, es "microsoft word 9.0 object library"
Creo il mio bel kit, lo porto al cliente che, se non ha word installato...
BUM!
io vorrei però che il mio prog si installasse correttamente, e sapendo che
word non c'è, funzionasse comunque (gestisco io la presenza/assenza).
Per "provare" se funziona, potrei "trappare" l'errore, ma devo per lo meno
definire una variabile che "usi" l'oggetto, oppure se è un controllo,
inserirlo nel form.
Ma se lo faccio, il programma esplode. Non c'è On Error che tenga.
sapete come fare?
grazie.

grazie.
invece di aggiungere un riferimento ,
creati un oggetto al volo
con il createobject("nomeinterno.classe")!!!!
--------------------------------
Inviato via 
http://usenet.iol.it
 

 wrote in message
news:62Z110Z78Z205Y...@usenet.iol.it...


 word non c'è, funzionasse comunque (gestisco io la presenza/assenza).
[SNIP]
Come ti ha gia' suggerito Mirko devi usare l'associazione tardiva; quindi
devi togliere il riferimento, dichiarare le tue variabili oggetto 'As
Object' (invece che 'As Word.Application' ecc..) e creare le istanze con
CreateObject("Word.Application"), funzione di cui puoi intercettare l'errore
e usare direttamente come indicazione della presenza o meno del programma
che ti interessa.
Le controindicazioni sono un certo overhead nell'accesso a proprieta'/metodi
di quelle classi (ma visto che si tratta di funzioni accessorie del tuo
programma non dovresti risentirne) e la perdita dell'IntelliSense durante la
scrittura del codice.
Ciao
--
Luca Dormio
luca....@tin.it

 scrittura del codice.
Diciamo che potrebbe scrivere tutto il programma con i riferimenti a Word...
Poi toglie il riferimento a Word ed all'apertura fa una bella "creazione" di
Word.Application
dim objWord as object
on error resume next
    set objWord = createobject("Word.Application")
    if err.number <>0 then
        msgbox "Attenzione: non è presente Word, il programma verrà chiuso"
    end if
Dove c'è il msgbox potresti settare una variabile booleana che indica la
presenza o meno di word; quindi invece che terminare il programma limiti la
consultazione alle zone in cui non usi Word.
Dove invece usi Word fai il controllo sulla variabile settata
all'apertura...
es:
private sub command_click()
    if bEsisteWord then
        dim objWord as new Word.Application
    else
        msgbox "Funz non disponibile"
    endif
Ho reso l'idea???
E' la prima cosa che mi è venuta in mente...
Ciao
oZ
end sub

Capito!
OK, grazie!
"Luca Dormio" <lucaFAV...@tinFAVA.it> wrote in message
news:9j3tot$9n2$1...@fe1.cs.interbusiness.it...


    endif
Potrei sbagliarmi ma temo sia una complicazione inutile; dovendo comunque
dichiarare la variabile come Object il fatto di istanziarla successivamente
con New Word.Application non risolve ne' il problema del late binding ne'
quello dell'IntelliSense...


"Luca Dormio" <lucaFAV...@tinFAVA.it> ha scritto nel messaggio
news:9j4247$km0$1...@fe2.cs.interbusiness.it...

#If VER_DEBUG Then
    Private objWord As Word.Application
#Else
    Private objWord As Object
#End If
Private Sub Form_Load()
    #If VER_DEBUG Then
        Set objWord = New Word.Application
    #Else
        On Error Resume Next
        Set objWord = CreateObject("Word.Application")
        If Err.Number <> 0 Then
            MsgBox "Automazione con Word non disponibile", vbExclamation
            'Altre considerazioni del caso...
        End If
    #End If
End Sub
in questo modo non perder l'IntelliSense, deve perň ricordarsi di
impostare VER_DEBUG a 0 prima di compilare per il cliente (e togliere i
riferimenti all'automazione di Word)
l'ho buttata lě, ma a occhio dovrebbe funzionare...
Ciao
Faber

L'IntelliSense sarebbe l'elenco automatico di tutti i metodi/proprietà
esposti dall'oggetto
in fase di implementazione del codice?
Ciao
oZ

 in fase di implementazione del codice?
si, la 'tendina magina'  :P
Faber