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:
Wdrożenie własne firewallowanych źródła zdarzeń (punkt połączenia).
Ponowne używanie interfejsu punktu połączenia zdefiniowane w innej biblioteki typów.
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
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.
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:
Zobacz plik .idl w okólnik ATL próbki na przykład.
Umożliwia dodawanie właściwości i metody interfejsu zdarzenia ClassView.
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.
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
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.
W oknie dialogowym Punkt połączenia wdrożenie kliknij przycisk Dodaj Typelib.
Wybierz jede&n z libraries.nbsp typu dostępne; Po wybraniu biblioteki typów, zobaczysz listę dostępnych interfejsów w biblioteki typów.
Wybierz jeden lub więcej z dostępnych interfejsów i kliknij przycisk OK.
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.