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

Discussione: LATEBINDING Vs EARLYBINDING

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,456

    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
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  2. #2
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,153
    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.


  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,456
    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 22:26 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi