CISA FotoGallery

Statistiche

Tot. visite contenuti : 927930
Home Articoli tecnici VBA LateBinding Vs EarlyBinding

LateBinding Vs EarlyBinding

Ci sono 2 modi per sfruttare OLE Automation al fine di controllare applicazioni esterne (che ovviamente espongono un'interfaccia OLE)

1) LATE BINDING (Associazione Tardiva) che sfruttando il metodo CreateObject (per istanziare un oggetto nuovo) o GetObject (per usare l'istanza di un'oggetto già aperto).

Questo metodo non fa esplicito riferimento ad una Libreria, ma lascia l'autonomia al sistema di istanziare il riferimento più recente di quel SERVER di Automazione.

 

NON SERVONO RIFERIMENTI A LIBRERIE ESTERNE.

Esempio di codice in modalità LATEBINDING per istanziare un'oggetto EXCEL:
codice:

    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Workbooks.Open "c:\NomeFile.xls"


Oppure apriamo l'istanza di Excel già in esecuzione:
codice:

    Dim xlApp As Object
    Set xlApp = GetObject("c:\NomeFile.xls")


La variabile Oggetto [xlApp] ora contiene un'istanza di Excel nuova o preesistente.
Chiaramente se si cerca di usare il GetObject e non esiste nessuna istanza del Server di Automazione(EXCEL in questo caso) verrà
restituito un'errore Err=429, gestendo il quale si prevengono inceppamenti, in quanto si tenta di usare GETOBJECT, si intercetta l'errore 429 ed in tal caso si ricorre al CREATEOBJECT.

VANTAGGI:
Non richiedendo riferimenti fissi, su qualsiasi macchina venga eseguito il codice, anche se presenti VERSIONI di SERVER OLE diverse.
Il LATEBINDING è definito VERSION INDIPENDENT.
Notevole miglioria soprattutto per distribuzioni MDE che non richiederà lo scroll della collection REFERENCES con il Check della propery
ISBROKEN o BROKENREFERENCE membro di Application per poi caricarle RUNTIME, ma questo richiede la selezione del File SERVER OLE, quindi altro Codice.

SVANTAGGI:
Gli oggetti dichiarati in LATEBINDING non consentono di esporre gli EVENTI, quindi se si devono intercettare EVENTI dell'oggetto EXCEL da Access è impossibile con questa tecnica.
Gli oggetti dichiarati in LATEBINDING non consentono l'elenco di Metodi/Proprietà come in VBEditor è normale vedere con l'uso dell'Intellisense.
Gli oggetti dichiarati in LATEBINDING non consentono di usare le costanti appartenenti a quella Application in quanto non inseriti.
Gli oggetti dichiarati in LATEBINDING non consentono l'accesso all'HELP specifico della Libreria.

2) EARLY BINDING (Associazione Preventiva)
Questo metodo invece richiede l'esplicito riferimento al SERVER di AUTOMAZIONE, che dovrà essere inserito nelle LIBRERIE di riferimento del progetto.
Esempio di codice in modalità EARLYBINDING per istanziare un'oggetto EXCEL:
codice:

    Dim xlApp As New Excel.Application
    Set xlApp = New Excel.Application
    xlApp.Workbooks.Open "c:\NomeFile.xls"


VANTAGGI:
E' leggermente più veloce l'istanza dell'oggetto in quanto non serve la ricerca del SERVER OLE, che è già definito
Possiamo ereditare EVENTI.
Possiamo accedere all'uso delle Costanti.
Possiamo avere, tramite Intellisense da VBeditor, l'elenco di Metodi/Proprietà/Eventi.
Possiamo accedere all'HELP della libreria.

SVANTAGGI:
Il più grosso svantaggio, che però pesa a tal punto da rendere sconveniente questo metodo nonostante i numerosi vantaggi, è il
fatto che proprio per essere VERSION DIPENDENT, è come avere le mani legate, quindi le librerie del PC di sviluppo dovranno
essere le stesse di quelle del PC di destinazione, cosa non sempre possibile.

In conclusinoe, se non si devono ereditare eventi, il suggerimento è di far riferimento SEMPRE alla tecncia LATEBINDING, ma, in fase di sviluppo
è stupido rinunciare ai VANTAGGI di EARLYBINDING, quindi il mio consiglio è di sviluppare inserendo i RIFERIMENTI, e prima di distribuire
toglierli, inserendo la parte di codice per l'istanza in LATEBINDING sostituendo l'assegnazione delle Variabili da esplicito ad Object.

@Alex