Przegląd kodu

Na poniższej ilustracji przedstawiono koncepcyjną reprezentację bloków kodu niezbędnych do zaimplementowania przykładowego składnika dostawcy ADSI. Każda sekcja została opisana na poniższym rysunku. Doświadczeni programiści COM mogą stwierdzić, że jest to odpowiednie omówienie przykładowego składnika dostawcy. Aby uzyskać więcej informacji, zobacz Szczegóły kodu.

implementacja przykładowego dostawcy

Następujące ponumerowane elementy odpowiadają elementom bloku na rysunku.

  1. Ładowanie biblioteki DLL (Libmain.cpp, Guid.cpp). Punkt wejścia biblioteki DLL. Definicje obiektów statycznych fabryki klas dla dwóch obiektów dostawcy: Guid.cpp zawiera definicje CLSID dla implementacji różnych przykładowych obiektów składników dostawcy.
  2. Fabryka klas obiektu dostawcy i kod tworzenia (Cprovcf.cpp, Cprov.cpp, Stdfact.cpp). Obiekt dostawcy jest obiektem, który obsługuje IParseDisplayName podczas operacji powiązania moniker, jak opisano w artykule Znajdowanie i wiązanie w przykładowym składniku dostawcy.
  3. Wiązanie z obiektem (Getobj.cpp). Ten kod wywołuje analizator, aby sprawdzić, czy dana ścieżka usługi ADsPath jest składniowo poprawna, a następnie wykonuje wszelkie niezbędne mapowanie z ścieżki usługi katalogowej ADsPath do natywnej ścieżki usługi katalogowej dla elementu tworzonego jako obiekt usługi Active Directory. Wyszukuje definicję schematu dla tego typu obiektu i wypełnia obowiązkowe właściwości. Po utworzeniu obiektu Active Directory, dla wywołującego zostanie pobrany wskaźnik interfejsu IUnknown.
  4. Analizator przestrzeni nazw dostawcy (Parse.cpp). Jest to kod wywoływany przez element 3. Analizator sprawdza, czy przekazany ciąg ADsPath jest syntaktycznie poprawny dla własnej przestrzeni nazw.
  5. Fabryka klas, tworzenie i enumeracja obiektu przestrzeni nazw (Cnamcf.cpp, Cnamesp.cpp, Cenumns.cpp). Obiekt przestrzeni nazw jest obiektem kontenera, który można wyliczyć, aby znaleźć wszystkie obiekty węzła głównego dla tej przestrzeni nazw.
  6. Fabryka klas i kod tworzenia dla ogólnego obiektu Active Directory oraz fabryka klas, kod tworzenia i enumeracji dla ogólnego obiektu kontenerowego ADs (Cgenobj.cpp, Cenumobj.cpp, Common.cpp, Core.cpp). Ten kod jest wykonywany po utworzeniu obiektu usługi Active Directory.
  7. Filtrowanie i wyliczanie wartości VARIANTs (Cenumvar.cpp, Object.cpp). Gdy kolekcja elementów VARIANT pojedynczego typu jest zarządzana w ramach interfejsu ADSI, ten kod jest używany.
  8. Globals (Globals.cpp). Słowa kluczowe przestrzeni nazw, struktury mapowania składni z natywnych formatów danych do typu WARIANT automatyzacji usługi ADs są zdefiniowane tutaj.
  9. Marshaling/unmarshaling danych (Pack.cpp, Property.cpp, Smpoper.cpp). Konwersja z natywnych formatów danych do obsługiwanego zestawu typów wariantów automatyzacji występuje, gdy właściwości obiektu są ładowane do pamięci podręcznej właściwości. Inna specjalna obsługa danych musi być wykonywana, gdy struktury ze wskaźnikami są kopiowane, usuwane lub przenoszone w pamięci.
  10. Pamięć podręczna właściwości (Cprops.cpp). Właściwości buforowania to funkcja środowiska ADSI. IADs::GetInfo, IADs::GetInfoExi IADs::SetInfo metody działają w pamięci podręcznej właściwości.
  11. Zarządzanie pamięcią (Memory.cpp). Użycie jednego zestawu funkcji pamięci do przydzielenia i zwolnienia pamięci umożliwia przykładowemu składnikowi dostawcy śledzenie użycia pamięci i zatrzymywanie przecieków pamięci.
  12. Obiekty schematu i zarządzanie (Cschobj.cpp, Cprpobj.cpp, Cclsobj.cpp, Cenumsch.cpp). Obejmuje to procedury tworzenia obiektów schematu, zarządzania nimi i wyliczania ich. Obejmuje to obiekty klasy schematu, obiekty właściwości i obiekty składni, a także możliwość wyliczania obiektu kontenera klasy schematu.
  13. Wywołania specyficzne dla systemu operacyjnego (RegDSAPI.cpp). Obejmuje to wszystkie wywołania odwołujące się do natywnego systemu operacyjnego. Między innymi funkcje obejmują funkcje otwierające, zamykające, odczytujące i modyfikujące obiekty, a także te, które uzyskują dostęp do danych schematu i właściwości. Przykładowy składnik dostawcy symulował hierarchię katalogów przy użyciu rejestru. Tylko nazwy funkcji powinny być znaczące dla twórcy dostawcy.
  14. Implementacja IDispatch (Cdispmgr.cpp). Ten kod uzyskuje dostęp do danych biblioteki typów, aby umożliwić wywoływanie metod interfejsu w sposób zgodny z automatyzacją.