Aggiunta di punti di connessione a un oggetto

Il Tutorial ATL vie&ne illustrato come creare un controllo con supporto per i punti di connessione, come per aggiungere eventi e poi come implementare la connessione point.nbsp; IConnectionPointImpl discute come ATL implementa un punto di connessione.

Per implementare un punto di connessione, si hanno due scelte:

In entrambi i casi il punto di connessione guidata utilizza una libreria dei tipi per fare il suo lavoro.

&Notanbsp;  Ogni volta che aggiungete un metodo a un'interfaccia dispatch su cui hanno già implementato un punto di connessione, è necessario ricompilare il file idl e quindi seguire la procedura per aggiungere un punto di connessione a un controllo o un oggetto.

Per aggiungere un punto di connessione a un controllo o un oggetto

  1. Definire un'interfaccia dispatch nel blocco libreria di file IDL. Se è stata selezionata la casella di controllo Supporto di punti di connessione nella scheda attributi della creazione guidata oggetto ATL, l'interfaccia dispatch già verrà creato. Se non scegliete la casella di controllo Supporto di punti di connessione , è necessario aggiungere manualmente un'interfaccia dispatch al file IDL. Di seguito è riportato un esempio di un'interfaccia dispatch. Interfacce in uscita non sono tenute ad essere interfacce dispatch, ma molti linguaggi di script quali VBScript e JavaScript richiedono questo, quindi questo esempio utilizza due interfacce dispatch:
    biblioteca DProjLib { importlib("Stdole32.tlb"); importlib("Stdole2.tlb");[ uuid(57BC50F0-780B-11d1-8C44-0060083E866C), helpstring ("Buddy eventi") ] interfaccia dispatch DBuddyEvents { Proprietà: metodi: };
    
    

    Utilizzare le utilità uuidgen. exe o Guidgen. exe per generare un GUID.

  2. Aggiu&ngere l'interfaccia dispatch come [predefinito, fonte] interfaccia di coclasse per la object.nbsp; Ancora una volta, se è stata selezionata la casella di controllo Supporto di punti di connessione nella scheda attributi della creazione guidata oggetto ATL per questo controllo, la procedura guidata creerà [predefinito, fonte] voce. Per aggiungere manualmente questa voce, aggiungere la riga in grassetto:
    coclasse Buddy { interfaccia [default] G732;[default, fonte] interfaccia dispatch DBuddyEvents;}

    Vedere il file IDL il Circ ATL del campione per un esempio.

  3. Utilizzare ClassView per aggiungere proprietà e metodi all'interfaccia eventi.

  4. U&na volta definito completamente l'interfaccia dispatch, compilare il file IDL cliccando col tasto destro file idl in FileVisualizza e selezionando la compilazione option.nbsp; Questo produrrà la libreria dei tipi.

  5. La classe i&n ClassView di fare clic destro e selezionare Implementare punto di connessione.... Una finestra di dialogo visualizzerà una o più schede libreria tipo e ogni scheda visualizzerà le interfacce per quel tipo di library.nbsp; Se si sceglie un'interfaccia e premere OK, sarà:
    • Generare un file di intestazione con una classe di evento proxy che implementa il codice che renderà le chiamate uscente per l'evento.

    • Aggiungere una voce per la mappa del punto di connessione.

    • Aggiungere un commento e # Error (dicendo di sostituire il parametro NULL con l'indirizzo del dispID) l'elenco di parametri di IProvideClassInfo2Impl.

    Se &non hanno costruito la tua libreria dei tipi, si vedrà un elenco di tutti i typelibs sul vostro computer.nbsp; È solo necessario utilizzare uno di questi altri typelibs per definire il punto di connessione, se si desidera implementare l'interfaccia in uscita stessa esatta trovata in un'altra libreria dei tipi.  Se si genera una libreria dei tipi senza interfaccia di origine predefinito in Coclasse, finestra di dialogo verrà visualizzato un messaggio di avviso senza interfaccia adatto (fonte) nella libreria dei tipi di segnalazione.

Per implementare un punto di connessione, tratto da una libreria dei tipi di un altro oggetto

  1. In ClassView, fare clic destro su una classe che implementa una macro BEGIN_COM_MAP e selezionare il punto di connessione di implementare dal menu di scelta rapida.

  2. Nella finestra di dialogo Punto di connessione di implementare , fare clic su Aggiungi Typelib....

  3. Selezio&nare da uno dei libraries.nbsp del tipo disponibili; Dopo aver selezionato la libreria dei tipi, verrà visualizzato un elenco delle interfacce disponibili nella libreria dei tipi.

  4. Scegli una o più delle interfacce disponibili e fare clic su OK.

  5. Modificare il file IDL per entrambi:
    • Copiare l'interfaccia dispatch dal file idl per l'oggetto cui origine eventi viene utilizzato.

    • Utilizzare l'istruzione importlib su tale libreria dei tipi.

Ecco un esempio di un file IDL che utilizza il punto di connessione dal controllo Circ.

[
   UUID(38BBFD91-7575-11D1-8C3C-0060083E866C),
   Version(1.0),
   helpstring ("16190 1.0 Type Library")
]
Biblioteca MY16190Lib
{
   importlib("Stdole32.tlb");
   importlib("Stdole2.tlb");
   importlib("D:\\ATL25\\samples\\circ\\circ.tlb");   / / **** aggiungere questa riga [
      UUID(38BBFD9E-7575-11D1-8C3C-0060083E866C),
      helpstring ("Class Atl16190Ctl")
   ]
   Coclasse Atl16190Ctl
   {
      interfaccia [default] IAtl16190Ctl;
      [default, fonte] interfaccia dispatch _CircEvents;      / / **** e quello in corso
   };
}

Index