Aggiunta di punti di connessione a un oggetto

L'esercitazione su ATL illustra come creare un controllo con supporto per i punti di connessione, come aggiungere eventi e quindi come implementare il punto di connessione. ATL implementa i punti di connessione con la classe IConnectionPointImpl .

Per implementare un punto di connessione, sono disponibili due opzioni:

  • Implementare la propria origine evento in uscita aggiungendo un punto di connessione al controllo o all'oggetto .

  • Riutilizzare un'interfaccia del punto di connessione definita in un'altra libreria dei tipi.

In entrambi i casi, la Procedura guidata Implementa punto di connessione usa una libreria dei tipi per svolgere il proprio lavoro.

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

  1. Definire una dispinterface nel blocco di libreria del file con estensione idl. Se è stato abilitato il supporto per i punti di connessione quando è stato creato il controllo con la Creazione guidata controllo ATL, la dispinterface verrà già creata. Se non è stato abilitato il supporto per i punti di connessione quando è stato creato il controllo, è necessario aggiungere manualmente una dispinterface al file con estensione idl. Di seguito è riportato un esempio di dispinterface. Le interfacce in uscita non devono essere interfacce dispatch, ma molti linguaggi di scripting, ad esempio VBScript e JScript, richiedono questa operazione, quindi questo esempio usa due interfacce dispinterface:

    [
       uuid(3233E37D-BCC0-4871-B277-48AE6B61224A),
       helpstring("Buddy Events")
    ]
    dispinterface DBuddyEvents
    {
       properties:
       methods:
    };
    

    Usare l'utilità uuidgen.exe o guidgen.exe per generare un GUID.

  2. Aggiungere la dispinterface come [default,source] interfaccia nella coclasse per l'oggetto nel file con estensione idl del progetto. Anche in questo caso, se è stato abilitato il supporto per i punti di connessione al momento della creazione del controllo, la Creazione guidata controllo ATL creerà la [default,sourcevoce ] . Per aggiungere manualmente questa voce, aggiungere la riga in grassetto:

    coclass Buddy
    {
       [default] interface IBuddy;
       [default,source] dispinterface DBuddyEvents;
    };
    

    Per un esempio, vedere il file con estensione idl nell'esempio Circ ATL.

  3. Utilizzare Visualizzazione classi per aggiungere metodi e proprietà all'interfaccia evento. Fare clic con il pulsante destro del mouse sulla classe in Visualizzazione classi, scegliere Aggiungi dal menu di scelta rapida e fare clic su Aggiungi punto di connessione.

  4. Nella casella di riepilogo Interfacce di origine della Procedura guidata Implementa punto di connessione selezionare Interfacce del progetto. Se si sceglie un'interfaccia per il controllo e si preme OK, sarà possibile:

    • Generare un file di intestazione con una classe proxy di evento che implementa il codice che effettuerà le chiamate in uscita per l'evento.

    • Aggiungere una voce alla mappa dei punti di connessione.

    Verrà visualizzato anche un elenco di tutte le librerie dei tipi nel computer. È consigliabile usare una di queste altre librerie di tipi per definire il punto di connessione se si vuole implementare la stessa interfaccia in uscita esatta presente in un'altra libreria dei tipi.

Per riutilizzare un'interfaccia del punto di connessione definita in un'altra libreria dei tipi

  1. In Visualizzazione classi fare clic con il pulsante destro del mouse su una classe che implementa una macro BEGIN_COM_MAP , scegliere Aggiungi dal menu di scelta rapida e fare clic su Aggiungi punto di connessione.

  2. Nella Procedura guidata Implementa punto di connessione selezionare una libreria dei tipi e un'interfaccia nella libreria dei tipi e fare clic su Aggiungi.

  3. Modificare il file con estensione idl in uno dei due modi seguenti:

    • Copiare la dispinterface dal file con estensione idl per l'oggetto di cui viene usata l'origine evento.

    • Usare l'istruzione importlib in tale libreria dei tipi.

Vedi anche

Punto di connessione