Objekty třídy COM a identifikátory CLSI
Server COM je implementovaný jako třída modelu COM. třídy MODELU COM je implementace skupiny rozhraní v kódu spouštěná při každé interakci s daným objektem. Mezi třídou C++ a třídou COM je důležité rozlišovat: V jazyce C++ je třída typem, zatímco třída MODELU COM je jednoduše definice objektu a nemá žádný typ, ačkoli ji programátor jazyka C++ může implementovat pomocí třídy C++. Com je navržený tak, aby umožňoval použití třídy různými aplikacemi, včetně aplikací psaných bez znalosti existence dané konkrétní třídy. Kód třídy pro daný typ objektu proto existuje buď v dynamické propojené knihovně (DLL) nebo v jiné spustitelné aplikaci (EXE).
Každá třída COM je identifikována CLSID, jedinečný 128bitový identifikátor GUID, který musí server zaregistrovat. COM používá tento CLSID na žádost klienta k přidružení konkrétních dat k knihovně DLL nebo EXE obsahující kód, který implementuje třídu, čímž se vytvoří instance objektu.
Pro klienty a servery na stejném počítači je CLSID serveru vše, co klient kdy potřebuje. Na každém počítači udržuje com databázi (využívá systémový registr na platformách Microsoft Windows a Macintosh) všech identifikátorů CLSI pro servery nainstalované v systému. Jedná se o mapování mezi jednotlivými CLSID a umístěním knihovny DLL nebo EXE, které jsou součástí kódu pro tento CLSID. Com se s touto databází poraďte pokaždé, když klient chce vytvořit instanci třídy COM a používat své služby, takže klient nikdy nemusí znát absolutní umístění kódu v počítači.
U distribuovaných systémů poskytuje com položky registru, které umožňují vzdálenému serveru zaregistrovat se pro použití klientem. I když aplikace potřebují znát pouze IDENTIFIKÁTOR CLSID serveru, protože mohou spoléhat na registr k vyhledání serveru, com umožňuje klientům přepsat položky registru a určit umístění serveru, aby plně využili výhod sítě. (Viz Vyhledání vzdáleného objektu.)
Základní způsob vytvoření instance třídy je prostřednictvím objektu třídy COM třídy. Jedná se o jednoduchý zprostředkující objekt, který podporuje funkce, které jsou společné pro vytváření nových instancí dané třídy. Většina objektů třídy používaných k vytváření objektů z CLSID podporuje rozhraní IClassFactory rozhraní, které zahrnuje důležité CreateInstance metoda. Implementujete rozhraní IClassFactory pro každou třídu objektu, kterou nabízíte k vytvoření instance. (Další informace o implementaci IClassFactory najdete v tématu ImplementaceIClassFactory .)
Poznámka
Servery, které podporují jiné vlastní rozhraní pro vytváření tříd, se nevyžadují pro podporu IClassFactory konkrétně. Volání aktivačních funkcí jiných než CoGetClassObject (například CoCreateInstanceEx) však vyžadují, aby server podporoval IClassFactory.
Když klient chce vytvořit instanci objektu serveru, použije clSID požadovaného objektu ve volání CoGetClassObject. (Toto volání může být buď přímé, nebo implicitní, prostřednictvím jedné z pomocných funkcí pro vytváření objektů.) Tato funkce vyhledá kód přidružený k CLSID a vytvoří objekt třídy a poskytne ukazatel na požadované rozhraní. (CoGetClassObject přebírá riid param, který určuje ukazatel požadovaného rozhraní klienta.)
Poznámka
Com má jen několik funkcí, na kterých je postaveno mnoho dalších. Nejdůležitější z nich je pravděpodobně CoGetClassObject, který je základem všech funkcí vytváření instancí.
Pomocí tohoto ukazatele může volající vytvořit instanci objektu a načíst ukazatel na požadované rozhraní objektu. Toto je obvykle inicializační rozhraní, které slouží k aktivaci objektu (umístit ho do spuštěného stavu), aby klient mohl dělat cokoli s objektem, který chce. Při použití základních funkcí modelu COM se klient musí postarat také o uvolnění všech ukazatelů objektu.
Dalším mechanismem aktivace instancí objektů je moniker třídy. Třídy monikers svázají s objektem třídy, pro kterou jsou vytvořeny. Další informace najdete v tématu třídy Monikers.
Com poskytuje několik pomocných funkcí, které snižují práci vytváření instancí objektů. Jsou popsány v pomocných funkcích pro vytváření instancí .
Související témata