+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 3 su 3

LATEBINDING Vs EARLYBINDING

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    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:
            Dim xlApp As Object
            Set xlApp = CreateObject("Excel.Application")
            xlApp.Workbooks.Open "c:\NomeFile.xls"
    
    Oppure apriamo l'istanza di Excel già in esecuzione:
            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:
            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.
    ℹ️ Leggi di più su @Alex ...

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Peccato che in VBA non esistano le
    Istruzioni di compilazione #If ... Then ... #Else
    come in VB6, sarebbe tutto un po' più semplice perchè si possono usare entrambe, in automatico.

    Ad ogni modo complimenti per la chiarezza nell'esposizione.
    Breve, concisa, ed esauriente.

    ℹ️ Leggi di più su gibra ...

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Peccato che in VBA non esistano le
    Istruzioni di compilazione #If ... Then ... #Else
    come in VB6, sarebbe tutto un po' più semplice perchè si possono usare entrambe, in automatico.
    VBA è il fratello storpio di VB6 per molti aspetti...
    Tuttavia credo che il VBA possa gestire quello che dici, usando una CONST ovviamente per definire se si lavora in LATE/EARLY...
    Il problema è che per modificarla serve l'IDE accessibile...
    Non so se ho capito bene il tuo suggerimento e risposto a tono...
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Ad ogni modo complimenti per la chiarezza nell'esposizione.
    Breve, concisa, ed esauriente.

    Si potrebbe allargare l'argomento anche alle Classi ed ad altri Oggetti dotati di interfaccia COM, ma non ho volutamente
    inserito nulla, essendo questo argomento notoriamente poco conosciuto per gli utenti VBA poco esperti, e pensavo potesse solo
    generare fumo e dubbi.

    Grazie.
    Ultima modifica di @Alex; 20-06-2010 23:26 
    ℹ️ Leggi di più su @Alex ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Riferimenti per latebinding
    Da ArmandoVBA nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 10-10-2018, 11:28
  2. latebinding Office.CommandBarControl
    Da ArmandoVBA nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 09-10-2018, 19:33
  3. Latebinding
    Da ArmandoVBA nel forum Microsoft Access
    Risposte: 6
    Ultimo Post: 27-02-2018, 16:12
  4. Utilizzo di FileDialogFilePicker in Latebinding
    Da liodevac nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 20-04-2012, 10:59