Utilizzo di associazione anticipata e associazione tardiva in automazione

Traduzione articoli Traduzione articoli
Identificativo articolo: 245115 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Come l'associazione a un server di automazione pu˛ influire sulle numerose operazioni in del programma, ad esempio prestazioni, flessibilitÓ e facilitÓ di gestione.

In questo articolo illustra i tipi di binding disponibile per i client di automazione e valuta entrambi i lati di ogni metodo.

Informazioni

L'automazione Ŕ un processo in cui un componente software comunica con e/o controlli di un altro componente software utilizzando Microsoft COM (Component Object Model). ╚ la base per la maggior parte delle comunicazioni tra componenti utilizzata in linguaggi quali Visual Basic o Visual Basic, Applications Edition ed Ŕ diventata una parte normale di maggior parte dei programmi.

In passato, un oggetto di automazione Ŕ qualsiasi oggetto che supporta IDispatch interfaccia. Questa interfaccia consente a client chiamare i metodi e proprietÓ in fase di esecuzione senza dover sapere esattamente lo stesso oggetto sta comunicando con in fase di progettazione, un processo detto associazione tardiva. Oggi, tuttavia, il termine che oggetto di automazione applicabile a qualsiasi oggetto COM, anche quelli che non supportano IDispatch (e pertanto non pu˛ essere ad associazione tardiva). In questo articolo si presuppone l'oggetto si Automating supporta entrambi i metodi di associazione.

Che cos'Ŕ l'associazione?

Associazione Ŕ un processo di corrispondenza chiamate di funzione scritti da al programmatore del codice effettivo (interno o esterno) che implementa la funzione. Viene eseguita quando l'applicazione viene compilata e tutte le funzioni chiamate nel codice devono essere associate il codice pu˛ essere eseguito.

Per comprendere il processo, Ŕ possibile pensare "associazione" in termini di pubblicazione di un libro. Si supponga che il codice sia il testo della Rubrica in cui in un determinato paragrafo Ŕ stato scritto un elemento come "vedere il capitolo 12, pagina x per ulteriori informazioni." Non Ŕ noto che il numero di pagina fino a quando il libro Ŕ terminato, prima che del paragrafo pu˛ essere letti come previsto, devono essere associate insieme tutte le pagine del libro e il numero di pagina corretta Ŕ inserito il paragrafo. Attendere per il libro "associazione" prima di poter fare riferimento altre parti del libro.

Associazione di software Ŕ simile. Il codice Ŕ costituito da elementi che devono essere estratti insieme prima che il codice pu˛ essere "lettura." Associazione consiste della funzione di sostituzione nomi con indirizzi di memoria (o offset di memoria, a essere pi¨ precisi) in cui il codice verrÓ "passare a" quando viene chiamata la funzione. Per gli oggetti COM, l'indirizzo Ŕ un offset di memoria in una tabella di puntatori (denominato le v-table) contenuto nell'oggetto. Quando Ŕ associata una funzione di COM, Ŕ associato tramite la tabella di v.

La struttura di un oggetto COM Ŕ semplice. Quando il codice contiene un riferimento a un oggetto, contiene un puntatore indiretto sopra la tabella di v. La tabella di v Ŕ una matrice di indirizzi di memoria in cui ogni voce Ŕ una funzione diversa pu˛ essere richiamata su tale oggetto. Per chiama la funzione di terza su un oggetto COM, Ŕ possibile passare a tre voci nella tabella e quindi passare alla posizione di memoria specificato non esiste. Che esegue il codice per la funzione e, al termine, tornare nuovamente pronto per eseguire la riga di codice successiva.

+-[Code]------------+  +.................................[COM Object]...+
|                   |  : +-------------+                                :
|Set obj = Nothing -|--->| obj pointer |                                :
|                   |  : +-|-----------+                                :
+-------------------+  :   |   +-----------------+                      :
                       :   +-->| v-table pointer |                      :
                       :       +--|--------------+                      :
                       :          |                                     :
                       :          |  +----------------------------+     :
                       :  (3rd)   |  | Function 1 Address pointer |     :
                       : (Offset) |  +----------------------------+     :
                       :          |  | Function 2 Address pointer |     :
                       :          |  +----------------------------+     :
                       :          +->| Function 3 Address pointer |     :
                       :             +----------------------------+     :
                       +................................................+

				
sopra illustrato cosa accade quando un oggetto COM di rilascio. PoichÚ tutti gli oggetti COM ereditano da IUnknown, le prime tre voci nella tabella sono i metodi a IUnknown. Quando Ŕ necessario liberare l'oggetto, il codice chiama la funzione terza nella tabella v (IUnknown:: Release).

Fortunatamente, questo lavoro viene eseguito da Visual Basic dietro le quinte. In qualitÓ di programmatore Visual Basic, Ŕ mai necessario affrontare una v-table direttamente. Ma, questa struttura Ŕ come tutti gli oggetti COM sono associati, ed Ŕ importante che si conoscono per capire quali associazione.

Associazione anticipata

L'esempio precedente Ŕ di ci˛ che Ŕ noto prima (o v-table) associato. Per tutti gli oggetti COM, questo tipo di associazione ha posizionare ogni volta che viene chiamato interfaccia IUnknown di un oggetto COM. Ma per quanto riguarda le altre funzioni dell'oggetto? Come viene chiamato proprio metodo di aggiornamento o la proprietÓ Parent? Si tratta di funzioni personalizzate che sono in genere univoche per un oggetto. Se posizioni nella tabella-v non presuppone, come si trovare gli indirizzi di funzione necessari per chiamare tali?

La risposta, naturalmente, dipende da se o non si conosce in anticipo v-table dell'oggetto ha questo aspetto. In caso contrario, Ŕ possibile eseguire il processo di associazione anticipata stesso per i metodi dell'oggetto personalizzato utilizzata per i metodi di IUnknown. Questo Ŕ ci˛ che in genere si intende per "anticipata associazione".

Per utilizzare l'associazione anticipata su un oggetto, Ŕ necessario sapere che la tabella di v. In Visual Basic, procedere aggiungendo un riferimento a una libreria dei tipi che descrive l'oggetto, l'interfaccia (v-table) e tutte le funzioni che possono essere chiamate sull'oggetto. Al termine dell'operazione, Ŕ possibile dichiarare un oggetto come un determinato tipo, quindi impostare e utilizzare l'oggetto utilizzando la tabella di v. Ad esempio, se si desidera automatizzare Microsoft Office Excel utilizzando l'associazione anticipata, Ŕ necessario aggiungere un riferimento a "Microsoft Excel 8.0 Object Library" nella finestra di dialogo progetto|riferimenti e quindi dichiarare la variabile come di tipo "Excel.Application". Da quindi in tutte le chiamate effettuate alla variabile di oggetto potrebbero essere ad associazione anticipata:
' Set reference to 'Microsoft Excel 8.0 Object Library' in
' the Project|References dialog (or Tools|References for VB4 or VBA).

' Declare the object as an early-bound object
  Dim oExcel As Excel.Application

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via the v-table
  oExcel.Visible = True
				
questo metodo funziona la maggior parte notevole del tempo, ma cosa succede se non si conosce l'esatta oggetto si verrÓ utilizzato in fase di progettazione? Ad esempio, che cosa fare se Ŕ necessario parlare completamente per pi¨ versioni di Excel o eventualmente per un oggetto "sconosciuto"?

L'associazione tardiva

COM include IDispatch. Si dice che dispone di un'interfaccia dispatch (se Ŕ l'unica interfaccia supportano) o di interfaccia duale gli oggetti che implementano IDispatch (se hanno un'interfaccia personalizzata che nelle prime fasi, Ŕ possibile associare a). Si dice che i client che consente di associare IDispatch essere "tardiva" poichÚ la proprietÓ esatta o il metodo che esegue la chiamata Ŕ determinata in fase di esecuzione utilizzando i metodi di IDispatch per individuarli. Tornando all'esempio Rubrica precedente, si tratta di come come a un piŔ di pagina che rimanda a del sommario in cui Ŕ necessario "ricerca di"numero di pagina al"tempo di lettura" anzichÚ Ŕ giÓ stampato esiste nel testo.

La chiave dell'interfaccia controllata da due funzioni: GetIDsOfNames e Invoke. Prima funzione di mapping di nomi (stringhe) a un identificatore (denominato un dispid) che rappresenta la funzione. Una volta che si conosce l'ID per la funzione che si desidera chiamare, Ŕ possibile chiamare mediante la funzione di Invoke. Questo tipo di chiamata di metodo viene chiamato "associazione tardiva".

Anche in questo caso, in Visual Basic il modo si specifica il modo in cui Ŕ associato l'oggetto Ŕ la dichiarazione dell'oggetto. Se si dichiara una variabile oggetto come "Oggetto" sono, infatti, che indica di Visual Basic per utilizzare IDispatch e pertanto sono l'associazione tardiva:
' No reference to a type library is needed to use late binding.
' As long as the object supports IDispatch, the method can 
' be dynamically located and invoked at run-time.

' Declare the object as a late-bound object
  Dim oExcel As Object

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via IDispatch
  oExcel.Visible = True
				
come si pu˛ vedere, il resto del codice Ŕ lo stesso. L'unica differenza tra associazione anticipata e associazione tardiva (in termini di codice che scritto) Ŕ nella dichiarazione di variabile.

╚ importante notare che ci˛ che Ŕ "tardiva" Ŕ la funzione di chiamata e non il metodo viene chiamato. Dalla precedente discussione sull'associazione in generale, si noterÓ che IDispatch stesso Ŕ "associazione anticipata:" che Ŕ a dire che Visual Basic effettua la chiamata impostare la proprietÓ Visible tramite una voce di v-table (IDispatch:: Invoke), come qualsiasi chiamata COM. L'oggetto COM Ŕ responsabile di inoltrare la chiamata alla funzione corretta per rendere visibile Excel. Questo riferimento indiretto consente verranno ai client di essere compilato (che Ŕ, associato un indirizzo di funzione valido) ma ancora non conoscono la funzione esatta che eseguirÓ il lavoro effettivamente.

Associazione DISPID

Alcuni client (pi¨ notevolmente MFC e Visual Basic 3.0, ma anche Visual Basic 5.0 e 6.0 con si rispetto ai controlli ActiveX) utilizzare un modulo di ibrido dell'associazione tardiva di automazione chiamato associazione dispid. Se l'oggetto COM Ŕ noto in fase di progettazione, memorizzato nella cache il dispids per le funzioni che vengono chiamate e passate direttamente al IDispatch:: Invoke senza la necessitÓ di chiamare GetIDsOfNames in fase di esecuzione. Questo notevolmente pu˛ migliorare le prestazioni, poichÚ invece di effettuare due chiamate COM in ciascuna funzione, Ŕ solo necessario apportare una.

Associazione DISPID non Ŕ un'opzione che in Visual Basic 5.0 o 6.0 in genere Ŕ possibile scegliere. Viene utilizzato per gli oggetti che fanno riferimento in una libreria dei tipi, ma non contengono un'interfaccia personalizzata (vale a dire per gli oggetti che dispongono di un'interfaccia dispatch solo) e per aggregare i controlli ActiveX ma, in generale, Visual Basic utilizza l'associazione anticipata di qualsiasi luogo, normalmente si utilizzerebbe associazione dispid.

Il modulo di associazione devo utilizzare?

La risposta a questa domanda dipende dalla quantitÓ sulla struttura del progetto come qualsiasi altro elemento. Si consiglia di associazione anticipata in quasi tutti i casi. Tuttavia, potrebbe essere motivi per scegliere l'associazione tardiva.

Associazione anticipata Ŕ il metodo preferito. ╚ il migliore migliore poichÚ l'applicazione fa riferimento direttamente all'indirizzo della funzione chiamata e non viene generato alcun overhead aggiuntivo in eseguendo una ricerca della fase di esecuzione. In termini di velocitÓ di esecuzione generale, Ŕ almeno due volte ad alta velocitÓ l'associazione tardiva.

Associazione anticipata consente inoltre indipendenza dai tipi. Quando si dispone di un riferimento impostato alla libreria dei tipi del componente, Visual Basic fornisce supporto di IntelliSense che consentono di codice correttamente ogni funzione. Visual Basic Avvisa anche se il tipo di dati di un parametro o valore restituito Ŕ errato, salvataggio molto tempo quando la scrittura e il debug del codice.

L'associazione tardiva Ŕ comunque utile in situazioni dove l'interfaccia esatta di un oggetto Ŕ sconosciuto in fase di progettazione. Se l'applicazione cerca di comunicare con pi¨ server sconosciuto oppure Ŕ necessario per richiamare le funzioni per nome (ad esempio utilizzando la funzione di Visual Basic 6.0 CallByName ) quindi Ŕ necessario utilizzare l'associazione tardiva. L'associazione tardiva Ŕ inoltre utile per risolvere problemi di compatibilitÓ tra pi¨ versioni di un componente che ha modificato o adattare l'interfaccia tra le versioni in modo non corretto.

I vantaggi per l'associazione anticipata rendono la scelta migliore quando possibile.

Conservando la compatibilitÓ con pi¨ versioni

Se si utilizza un componente che non ridistribuire con il pacchetto di installazione e non pu˛ essere garantita la versione esatta si comunicherÓ con in fase di esecuzione, Ŕ necessario prestare particolare attenzione per l'associazione anticipata su un'interfaccia Ŕ compatibile con tutte le versioni del componente, o (in alcuni casi) utilizzare l'associazione tardiva per chiamare un metodo che esiste in una determinata versione ed esito negativo normalmente se tale metodo non Ŕ presente nella versione installata nel sistema client.

Le applicazioni di Microsoft Office forniscono un buon esempio di tali server COM. Le applicazioni di Office in genere si espanderÓ le interfacce per aggiungere nuove funzionalitÓ o difetti precedenti corretti tra le versioni. Se si desidera automatizzare un'applicazione di Office, Ŕ consigliabile che si associa prima alla prima versione del prodotto che si prevede stato installato sul sistema del client di. Ad esempio, se Ŕ necessario essere in grado di automatizzare Excel 95, Excel 97, Excel 2000 ed Excel 2002, occorre utilizzare la libreria dei tipi di Excel 95 (XL5en32.olb) per garantire la compatibilitÓ con tutte le tre versioni.

Le applicazioni di Office viene inoltre illustrano che modelli a oggetti con le interfacce duali grandi dimensioni possono influire negativamente limitazioni di marshalling su alcune piattaforme. Per il codice per l'utilizzo migliore in tutte le piattaforme, utilizzare IDispatch. Per ulteriori informazioni sulla gestione compatibilitÓ quando si lavora con Office le applicazioni, fare clic numero articolo riportato per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
247579Utilizzo dell'associazione DISPID per automatizzare le applicazioni Office nei casi possibili

Riferimenti

Per ulteriori informazioni su COM, v-tabelle e l'utilizzo dell'automazione, vedere i seguenti manuali:
Rogerson Dale, in COM , filiale Microsoft locale, ISBN: 1-57231-349-8.

Curland, Matt, Avanzate di Visual Basic 6 , DevelopMentor, 0201707128.

ProprietÓ

Identificativo articolo: 245115 - Ultima modifica: venerdý 11 maggio 2007 - Revisione: 7.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Ultimate 2007
  • Microsoft Office Enterprise 2007
  • Microsoft Office Professional 2007
  • Microsoft Office Professional Plus 2007
  • Microsoft Office Standard 2007
  • Microsoft Office Home and Student 2007
  • Microsoft Office Basic 2007
  • Microsoft Office 2003, All Editions
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Chiavi:á
kbmt kbautomation kbinfo KB245115 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 245115
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com