Megosztás a következőn keresztül:


Objektumra mutató lekérése

Mivel a COM nem rendelkezik szigorú osztálymodellel, az ügyfél négyféleképpen tud példányosítani vagy mutatót kapni egy objektum felületére:

  • Olyan COM-kódtárfüggvény meghívása, amely előre meghatározott típusú objektumot hoz létre; vagyis a függvény egy adott objektumosztály egyetlen adott felületére mutató mutatót ad vissza.
  • Hívjon meg egy COM-kódtárfüggvényt, amely létrehozhat egy objektumot egy osztályazonosító (CLSID) alapján, és amely bármilyen típusú illesztőmutatót ad vissza.
  • Hívjon meg egy olyan felületet, amely létrehoz egy másik objektumot (vagy egy meglévőhöz csatlakozik), és visszaad egy illesztőmutatót a különálló objektumra.
  • Olyan objektum implementálása egy felülettel, amelyen keresztül más objektumok közvetlenül az ügyfélnek adják át az interfészmutatót.

Miután megszerezte az elsőt, további információt az objektum többi felületére mutató mutatókról a QueryInterface: Objektumban történő navigáláscímű témakörben talál.

Előre meghatározott típusú objektum létrehozása

Számos COM-függvény létezik, például CoGetMalloc, amelyek mutatókat adnak vissza adott felületi implementációkhoz. (CoGetMalloc lekéri a mutatót a szabványos COM memóriakiosztóhoz.) Ezek többsége segédfüggvény, és ezeknek a függvényeknek a többségét a jelen dokumentáció referencia szakaszai ismertetik, az adott terület alatt, amelyhez kapcsolódnak, például a tároláshoz vagy az adatátvitelhez.

Objektum létrehozása CLSID alapján

Számos függvény létezik, amelyeket az ügyfél egy CLSID alapján meghívhat, hogy létrehozzon egy objektumpéldányt és mutatót kapjon hozzá. Ezek a függvények a CoGetClassObjectfüggvényen alapulnak, amely létrehoz egy osztályobjektumot, és egy olyan felületet biztosít, amely lehetővé teszi az osztály példányainak létrehozását. Bár olyan információnak kell lennie, amely azt jelzi, hogy a kiszolgáló melyik rendszeren található, nincs szükség arra, hogy ezeket az információkat az ügyfél tartalmazza. Az ügyfélnek csak a CLSID-t kell ismernie, és soha nem a kiszolgálókód abszolút elérési útját. További információ: Objektum létrehozása osztályobjektumon keresztül.

Mutató visszaadása külön objektumba

A számos olyan felületi módszer közül, amelyek egy mutatót egy külön objektumra adnak vissza, több olyan is van, amelyek létrehoznak és visszaadnak egy mutatót egy enumerátor objektumra, amely lehetővé teszi annak megállapítását, hogy egy adott típusú objektum hány eleme tart fenn. A COM különböző elemek, mint például sztringek, fontos struktúrák, monikerek és IUnknown interfész mutatók számbavételéhez definiál interfészeket. Az enumerátorpéldányok létrehozásának és a felületére mutató mutatók létrehozásának tipikus módja egy másik felületről származó metódus meghívása. Az IDataObject interfész például két metódust határoz meg, EnumDAdvise és EnumFormatEtc, amelyek két különböző enumerálási objektum interfészeihez ad vissza mutatót. A COM-ban számos más példa is található olyan módszerekre, amelyek mutatókat adnak vissza objektumokra, például az OLE összetett dokumentum felület IOleObject::GetClientSite, amely, amikor a beágyazott vagy csatolt objektum meghívásra kerül, visszatérési mutatót ad a tároló objektum IOleClientSitemegvalósítására.

Objektum implementálása, amelyen keresztül közvetlenül az ügyfélnek továbbíthat egy interfészmutatót

Ha két objektumnak, például egy OLE összetett dokumentumtárolónak és -kiszolgálónak kétirányú kommunikációra van szüksége, mindegyik egy interfészmetódust tartalmazó objektumot implementál, amelyen keresztül egy interfészmutatót továbbíthat a másik objektumnak. A implementáló objektum, amely egyben a létrehozott objektum ügyfele is, meghívhatja a metódust, és lekérheti az átadott mutatót.

COM-ügyfelek és -kiszolgálók

COM-kiszolgáló felelősségei