Dodawanie punktów połączenia do obiektu

Samouczek ATL pokaza&no, jak utworzyć formant z obsługą punktów połączenia, jak dodać zdarzenia, a następnie implementowaniu point.nbsp połączenia; IConnectionPointImpl omówiono, jak ATL implementuje punktu połączenia.

Aby zaimplementować usługę punktu połączenia, masz dwie możliwości:

W obu przypadkach Kreator punktu połączenia używa biblioteki typów do wykonania swojej pracy.

Uwaga   W każdym przypadku, gdy dodanie metody do dispinterface na którym zostało już zaimplementowane punktu połączenia należy ponownie skompilować plik .idl i następnie wykonaj procedurę, aby dodać punkt połączenia do formantu lub obiektu.

Aby dodać punkt połączenia do formantu lub obiektu

  1. Zdefiniuj dispinterface w bloku biblioteki w pliku .idl. Jeśli zaznaczono pole wyboru Punkty połączeń wsparcia na karcie atrybuty kreatora obiektu ATL dispinterface już zostanie utworzony. Jeśli nie zaznaczono pole wyboru Obsługa punktów połączenia , należy ręcznie dodać dispinterface do pliku .idl. Poniżej przedstawiono przykład dispinterface. Wychodzące interfejsów nie są wymagane do wysyłki interfejsów, ale wiele języków skryptów, takich jak VBScript i JavaScript wymagają, to, aby w tym przykładzie dwóch dispinterfaces:
    biblioteka DProjLib { importlib("stdole32.TLB"); importlib("Stdole2.TLB");[uuid(57BC50F0-780B-11d1-8C44-0060083E866C),ciąg helpstring ("Buddy zdarzeń")]dispinterface DBuddyEvents{ }Właściwości:metody:};
    
    

    Użyj narzędzia uuidgen.exe lub guidgen.exe do generowania identyfikatora GUID.

  2. Dodać dispi&nterface jako [domyślne, źródła] interfejsu w coclass dla object.nbsp; Ponownie, jeśli zaznaczono pole wyboru Punkty połączeń wsparcia na karcie atrybuty kreatora obiektu ATL tego formantu, Kreator będzie utworzyć [domyślne, źródła] wpis. Aby ręcznie dodać ten wpis, należy dodać wiersz pogrubione:
    coclass Buddy { [domyślnie] interfejsu IBuddy;[domyślne, źródła] dispinterface DBuddyEvents;}

    Zobacz plik .idl w okólnik ATL próbki na przykład.

  3. Umożliwia dodawanie właściwości i metody interfejsu zdarzenia ClassView.

  4. Po eleme&ncie dispinterface pełni jest zdefiniowany, skompiluj plik .idl prawym przyciskiem myszy plik .idl w FileView i wybierając option.nbsp kompilacji; Dzięki temu można osiągnąć biblioteki typów.

  5. Klik&nij prawym przyciskiem myszy klasę w ClassView i zaznacz Punkt wprowadzenia połączenia.... Okno dialogowe wyświetli jeden lub więcej kart biblioteki typów i każdej karcie będą wyświetlane interfejsy dla tego typu library.nbsp; Jeśli wybrany interfejs i naciśnij przycisk OK, będzie:
    • Wygeneruj plik nagłówka z klasy proxy zdarzeń, który implementuje kodu, który będzie wywołań firewallowanych dla zdarzenia.

    • Dodaj wpis na mapie punktu połączenia.

    • Dodawanie komentarzy i użytkownika (nakłaniała Cię do parametru NULL należy zastąpić adres dispID) do listy parametr IProvideClassInfo2Impl.

    Jeśli &nie zostały utworzone z biblioteki typów, zobaczysz listę wszystkich typelibs na Twoje computer.nbsp; Określenie punktu połączenia, jeśli chcesz zaimplementować dokładnie tego samego interfejsu wychodzącego w innej sekcji typelib, należy tylko użyć jednego z tych innych typelibs.  W przypadku tworzenia biblioteki typów bez interfejsu domyślnego źródła w coclass okna dialogowego wyświetli komunikat ostrzegawczy, zgłoszenie nie interfejsu odpowiednie (Źródło) biblioteki typów.

Aby zaimplementować punktu połączenia z innym obiektem typu biblioteki

  1. W ClassViewkliknij prawym przyciskiem myszy na klasy, która implementuje makra BEGIN_COM_MAP i zaznacz punkt połączenia wdrożenie z menu skrótów.

  2. W oknie dialogowym Punkt połączenia wdrożenie kliknij przycisk Dodaj Typelib.

  3. Wybierz jede&n z libraries.nbsp typu dostępne; Po wybraniu biblioteki typów, zobaczysz listę dostępnych interfejsów w biblioteki typów.

  4. Wybierz jeden lub więcej z dostępnych interfejsów i kliknij przycisk OK.

  5. Zmodyfikuj plik .idl, aby albo:
    • Skopiuj dispinterface z pliku idl dla obiektu, którego źródło zdarzeń jest używany.

    • Użyj instrukcji importlib na tej biblioteki typów.

Tutaj jest przykład z pliku .idl, który korzysta z punktu połączenia z kontroli okólnik.

[
   UUID(38BBFD91-7575-11D1-8C3C-0060083E866C),
   Version(1.0),
   Ciąg HelpString ("16190 1.0 biblioteki typów")
]
Biblioteka MY16190Lib
{
   importlib("stdole32.TLB");
   importlib("Stdole2.TLB");
   importlib("D:\\ATL25\\samples\\circ\\circ.TLB");   / / **** dodać ten [linii
      UUID(38BBFD9E-7575-11D1-8C3C-0060083E866C),
      Ciąg HelpString ("Klasa Atl16190Ctl")
   ]
   współklasy Atl16190Ctl
   {
      [domyślnie] interfejsu IAtl16190Ctl;
      [domyślny, źródło] dispinterface _CircEvents;      / / **** i ta
   };
}

Index