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


COM-osztályobjektumok és CLSID-k

A COM-kiszolgáló COM-osztályként van implementálva. A COM-osztály egy interfészcsoport implementálása egy kódban, amelyet egy adott objektum használatakor hajtanak végre. A C++ osztály és a COM osztály között fontos különbség van: A C++-ban az osztály egy típus, míg a COM osztály egyszerűen az objektum definíciója, és nem hordoz típust, bár egy C++ programozó C++ osztály használatával implementálhatja azt. A COM-t úgy tervezték, hogy lehetővé tegye egy osztály használatát különböző alkalmazások számára, beleértve az adott osztály létezésének ismerete nélkül írt alkalmazásokat is. Ezért egy adott típusú objektum osztálykódja egy dinamikus csatolt kódtárban (DLL) vagy egy másik végrehajtható alkalmazásban (EXE) található.

Minden COM-osztályt egy CLSIDazonosít, amely egy egyedi 128 bites GUID, amelyet a kiszolgálónak regisztrálnia kell. A COM ezt a CLSID-t használja egy ügyfél kérésére, hogy konkrét adatokat társítson az osztályt megvalósító kódot tartalmazó DLL-hez vagy EXE-hez, így létrehozva az objektum egy példányát.

Az ugyanazon a számítógépen lévő ügyfelek és kiszolgálók esetében a kiszolgáló CLSID azonosítója minden ügyfélnek szüksége van. A COM minden számítógépen fenntartja a rendszeren telepített kiszolgálók összes CLSID-jének adatbázisát (a Microsoft Windows és Macintosh platformokon a rendszerregisztrációs adatbázist használja). Ez egy leképezés az egyes CLSID-k és az adott CLSID kódját tartalmazó DLL vagy EXE helye között. A COM akkor tekinti át ezt az adatbázist, ha egy ügyfél egy COM-osztály egy példányát szeretné létrehozni, és használni a szolgáltatásait, így az ügyfélnek soha nem kell tudnia a kód abszolút helyét a számítógépen.

Elosztott rendszerek esetén a COM olyan beállításjegyzék-bejegyzéseket biztosít, amelyek lehetővé teszik a távoli kiszolgáló számára, hogy regisztrálja magát az ügyfél általi használatra. Bár az alkalmazásoknak csak a kiszolgáló CLSID azonosítóját kell ismerniük, mivel a beállításjegyzékre támaszkodhatnak a kiszolgáló megkereséséhez, a COM lehetővé teszi az ügyfelek számára a beállításjegyzék bejegyzéseinek felülbírálását és a kiszolgálóhelyek megadását, hogy teljes mértékben kihasználhassák a hálózatot. (Lásd: Távoli objektum keresése.)

Az osztálypéldányok létrehozásának alapvető módja egy COM osztályobjektum. Ez egyszerűen egy köztes objektum, amely támogatja az adott osztály új példányainak létrehozásához gyakran használt függvényeket. A CLSID-ből objektumok létrehozásához használt osztályobjektumok többsége támogatja a IClassFactory felületet, amely a CreateInstancemetódus fontosrészét képezi. Implementál egy IClassFactory felületet a példányosítani kívánt objektumosztályokhoz. (Az IClassFactoryimplementálásával kapcsolatos további információkért lásd IClassFactoryimplementálását.)

Jegyzet

A más egyéni osztálygyári felületet támogató kiszolgálók nem szükségesek az IClassFactorytámogatásához. A CoGetClassObject (például CoCreateInstanceEx) kívüli aktiválási függvények hívásához azonban a kiszolgálónak támogatnia kell IClassFactory.

 

Amikor egy ügyfél létre szeretné hozni a kiszolgáló objektumának egy példányát, a kívánt objektum CLSID azonosítóját használja a CoGetClassObjecthívásában. (Ez a hívás lehet közvetlen vagy implicit, az objektumlétrehozás segédfüggvényeinek egyikén keresztül.) Ez a függvény megkeresi a CLSID-hez társított kódot, létrehoz egy osztályobjektumot, és egy mutatót ad a kért felülethez. (CoGetClassObject egy riid paramétert használ, amely meghatározza az ügyfél kívánt felületmutatóját.)

Jegyzet

A COM-nak csak néhány funkciója van, amelyekre sok más épül. Ezek közül a legfontosabb valószínűleg CoGetClassObject, amely az összes példánylétrehozási függvény alapjául szolgál.

 

Ezzel a mutatóval a hívó létrehozhatja az objektum egy példányát, és lekérheti az objektum kívánt felületére mutató mutatót. Ez általában egy inicializálási felület, amely az objektum aktiválására (futó állapotba helyezésére) szolgál, hogy az ügyfél bármilyen munkát elvégezhesse a kívánt objektummal. A COM alapfüggvényeinek használatával az ügyfélnek ügyelnie kell arra is, hogy az összes objektummutatót felszabadítsa.

Az objektumpéldányok aktiválásának másik mechanizmusa az osztály monikerén keresztül történik. Az osztály monikerei annak az osztálynak az osztályobjektumához kötődnek, amelyhez létrehozták őket. További információ: Monikers osztály.

A COM számos segédfüggvényt biztosít, amelyek csökkentik az objektumpéldányok létrehozásának munkáját. Ezeket a Példánylétrehozás segédfüggvényekismerteti.

Objektum létrehozása osztályobjektum-