Com és az osztály gyári tárgyak
Amellett, hogy egy vagy több interfészeket származnak IUnknown terfeysa Intézet és végrehajtását a referencia számláló nyomon követni az ő ideje, hogy létezik, COM objektumok még egy különlegessége: akkor hozzon létre olyan speciális tárgyak, úgynevezett class factory (class gyárak). Minden COM-osztálynak megfelelő gyári osztálya van, amely felelős a COM osztály objektumainak létrehozásáért. Az osztálygyár egy speciális COM objektum, amely támogatja az IClassFactory interfészt. Ez az interfész az ActiveX modulban a következőképpen van meghatározva:
function CreateInstance (const unkOuter: IUnknown;
const iid: TIID; out obj): HResult; stdcall;
funkció LockServer (fLock: BOOL): HResult; stdcall;
A CreateInstance () metódus úgynevezett, hogy létrehozza az ezen osztálygyárhoz társított COM objektum példányát. Paraméter unkOuter ez a módszer pontot a IUnknown interfész a kontroll, ha az objektum jön létre (ahogyan ebben a fejezetben ismertetett, a koncepció a aggregáció, vagy összeszerelés, stb), egyfajta egység oldalán. Az iid paraméter tartalmazza az interfészazonosítót (IID), amellyel az objektumot vezérelheti. Az obj paraméternek tartalmaznia kell egy mutatót az iid paraméter által megadott felülethez.
A LockServer () módszer a COM szerver tárolására szolgál, még akkor is, ha egyetlen ügyfél sem hivatkozik a kiszolgálóra. Ha az fLock igaz, akkor a kiszolgálózár számlálója növekszik egy. Ha az fLock paraméter hamis, akkor a kiszolgálózár számláló értéke csökken. Ha ennek eredményeként a számláló kiszolgáló kapcsolatok egyenlő lesz 0 (azaz nem használnak bajtársa Klien), akkor a COM-kiszolgáló kikerül TComObject pamyati.Klassy és TComObjectFactory
A Delphi-ban két osztály található, amelyek a COM objektumokat és az osztálygyárakat tartalmazzák: TComObject és TComObjectFactory. A TComObject osztály tartalmazza az IUnknown felületet támogató infrastruktúrát, és objektumokat hoz létre a TComObjectFactory osztály használatával. Hasonlóképpen, a TComObjectFacility osztály támogatja az IClassFactory interfészt, és "tudja" a TComObject osztály objektumainak létrehozását. A COM objektum létrehozásának legegyszerűbb módja a COM objektumvarázsló használata, amely az Új elemek párbeszédpanel ActiveX lapján található. A 15.1-es lista bemutatja a varázsló által létrehozott modul pszeudokódját. Ez a pszeudokód bemutatja az említett osztályok közötti kapcsolatot.
15.1. A COM szerver modul pszeudo kódja
Windows, ActiveX, osztályok, ComObj;
TSomeComObject = osztály (TComObject, támogatott interfészek)
Az osztály- és interfészmódokat itt deklarálják
a megvalósítás a ComServ-ot használja;
Itt van a TSomeComObject végrehajtása
'SomeObject', 'The SomeObject osztály', ciMultiInstance, tmApartment);
end; A TComServer osztályból származó osztályt a legtöbb VCL-osztályhoz hasonlóan deklarálják és implementálják. Az átadott paramétereknek a kivitelező létrehozása () osztály TComObjectFactory, csatlakoztassa a leszármazottja TComServer osztályt a megfelelő objektum TComObjectFactory. Az első konstruktor paraméter a TComServer objektum. Mint ilyen paraméter, a ComServ modulban bejelentett globális ComServer objektum majdnem mindig átvitelre kerül. A második paraméter YAV TComObject kíván létrehozni egy osztályt, hogy szeretne társítani az osztály gyár, és a harmadik lehetőség - ez a osztályazonosítót Class COM TComObject. A negyedik és az ötödik paraméter a COM osztály osztályba sorolásához használt osztály neve és leírása. A hatodik paraméter a COM objektum példányát határozza meg, végül az utolsó paraméter az objektum szálmodelljét jelöli.
A TComObjectFactory osztály egy példánya létrejön a modul inicializálás szakaszában; Ebben az esetben az Osztálygyár elérhető lesz a COM objektum példányainak létrehozására közvetlenül a COM szerver betöltése után. A COM szerver betöltése annak típusától függ, azaz. attól, hogy a szerver belső (DLL) vagy külső (alkalmazás).