Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vzhledem k tomu, že com nemá striktní model třídy, existují čtyři způsoby, jak může klient vytvořit instanci nebo získat ukazatel na rozhraní objektu:
- Volání funkce knihovny COM, která vytvoří objekt předem určeného typu; to znamená, že funkce vrátí ukazatel pouze na jedno konkrétní rozhraní pro konkrétní třídu objektu.
- Volání funkce knihovny COM, která může vytvořit objekt založený na identifikátoru třídy (CLSID) a který vrátí libovolný typ požadovaného ukazatele rozhraní.
- Volání metody některého rozhraní, které vytvoří jiný objekt (nebo se připojí k existujícímu objektu) a vrátí ukazatel rozhraní na tento samostatný objekt.
- Implementujte objekt s rozhraním, přes které ostatní objekty předávají ukazatel rozhraní přímo klientovi.
Informace o získání ukazatelů na jiná rozhraní objektu po prvním zobrazení naleznete v tématu QueryInterface: Navigace v objektu.
Vytvoření objektu předem určeného typu
Existuje mnoho funkcí MODELU COM, například CoGetMalloc, které vrací ukazatele na konkrétní implementace rozhraní. (CoGetMalloc načte ukazatel na standardní paměťový alokátor COM.) Většina těchto funkcí jsou pomocné funkce, a většina z nich je popsána v referenčních částech této dokumentace pod konkrétní oblastí, ke které se vztahují, jako je například úložiště nebo přenos dat.
Vytvoření objektu založeného na CLSID
Existuje několik funkcí, které lze volat při daném CLSID, aby klient vytvořil instanci objektu a získal ukazatel na ni. Všechny tyto funkce jsou založeny na funkci CoGetClassObject, který vytvoří objekt třídy a poskytuje ukazatel na rozhraní, které umožňuje vytvářet instance této třídy. I když musí existovat informace o tom, na kterém systému se server nachází, není nutné, aby tyto informace byly obsaženy v klientovi. Klient potřebuje znát pouze CLSID a nikdy absolutní cestu kódu serveru. Další informace naleznete v tématu Vytvoření objektu prostřednictvím objektu třídy.
Vrácení ukazatele na samostatný objekt
Mezi mnoho metod rozhraní, které vracejí ukazatel na samostatný objekt, jsou několik, které vytvářejí a vrací ukazatel na objekt enumerátoru, což umožňuje určit, kolik položek daného typu objekt udržuje. COM definuje rozhraní pro výčet široké škály položek, jako jsou řetězce, důležité struktury, identifikátory (monikers) a IUnknown ukazatele rozhraní. Typický způsob vytvoření instance enumerátoru a získání ukazatele na jeho rozhraní je volání metody z jiného rozhraní. Například rozhraní IDataObject definuje dvě metody, EnumDAdvise a EnumFormatEtc, která vrací ukazatele na rozhraní na dvou různých objektech výčtu. Existuje mnoho dalších příkladů v modelu COM metod, které vracejí ukazatele na objekty, jako je například rozhraní složeného dokumentu OLE IOleObject::GetClientSite, které při zavolání vloženého nebo propojeného objektu vrátí ukazatel na implementaci objektu kontejneru IOleClientSite.
Implementace objektu, přes který se má předat ukazatel rozhraní přímo klientovi
Pokud dva objekty, jako je například složený kontejner dokumentů OLE a server, potřebují obousměrnou komunikaci, každá implementuje objekt obsahující metodu rozhraní, prostřednictvím které může předat ukazatel rozhraní druhému objektu. Implementující objekt, jenž je také klientem vytvořeného objektu, pak může volat metodu a získat ukazatel, který byl předán.
Související témata