Com și obiecte din fabrică din clasă

În plus, pentru a sprijini una sau mai multe interfețe care sunt derivate din terfeysa Institutul IUnknown, și punerea în aplicare a contorului de referință pentru a ține evidența mandatului său a existenței, COM obiecte au o particularitate specială: acestea vor crea sunt obiecte speciale, numit o fabrică de clasă (fabrici de clasă). Fiecare clasă COM are o clasă fabrica corespunzătoare care este responsabilă pentru crearea instanțelor de obiecte din această clasă COM. O fabrică de clasă este un obiect special COM care acceptă interfața IClassFactory. Această interfață este definită în modulul ActiveX după cum urmează:







funcția CreateInstance (const unkOuter: IUnknown;

const iid: TIID; out obj): HResult; stdcall;

funcția LockServer (fLock: BOOL): HResult; stdcall;

Metoda CreateInstance () este chemată pentru a crea o instanță a obiectului COM asociat cu această fabrică de clasă. Parametrul unkOuter al acestei metode indică interfața de control IUnknown dacă obiectul este creat ca un agregat (conceptul de agregare sau asamblare este explicat mai târziu în acest capitol). Parametrul iid conține identificatorul de interfață (IID), cu care puteți controla obiectul. Parametrul obj trebuie să conțină un pointer la interfața specificată de parametrul iid.

Metoda LockServer () este chemată pentru a stoca serverul COM în memorie, chiar dacă niciun client nu se referă la server. Dacă fLock este True, numărul de blocare a serverului este incrementat cu unul. Dacă parametrul fLock este False, numărul de blocare a serverului este diminuat cu unul. Dacă, ca urmare, numărul de referință al serverului este 0 (nu înseamnă niciun client care îl folosește), atunci acest server COM este descărcat din memorie. Clasele TComObject și TComObjectFactory







În Delphi, există două clase care încapsulează obiectele COM și fabricile de clasă: TComObject și TComObjectFactory. Clasa TComObject conține infrastructura necesară pentru a sprijini interfața IUnknown și a crea obiecte utilizând clasa TComObjectFactory. În mod similar, clasa TComObjectFacility acceptă interfața IClassFactory și "știe cum" pentru a crea obiecte din clasa TComObject. Cea mai ușoară modalitate de a crea un obiect COM este utilizarea Expertului de obiect COM, care se află în fila ActiveX a casetei de dialog "Elemente noi". Lista 15.1 prezintă pseudocodul modulului creat de acest expert. Acest pseudocod ilustrează relația dintre clasele menționate.

Listarea 15.1. Pseudo-codul modulului de server COM

Windows, ActiveX, Clase, ComObj;

TSomeComObject = class (TComObject, interfețe suportate)

Clasa și metodele de interfață sunt declarate aici

implementarea utilizează ComServ;

Iată implementarea proiectului TSomeComObject

'SomeObject', 'The SomeObject class', ciMultiInstance, tmApartment);

end; O clasă derivată din clasa TComServer este declarată și implementată ca majoritatea celorlalte clase VCL. Parametrii trecuți la constructorul Create () din clasa TComObjectFactory leagă acest copil de clasa TComServer la obiectul TComObjectFactory corespunzător. Primul parametru constructor este obiectul TComServer. Ca parametru, obiectul global ComServer declarat în modulul ComServ este aproape întotdeauna transferat. Al doilea parametru este clasa TComObject pe care doriți să o asociați cu fabrica din clasă, iar al treilea parametru este CLSID al clasei COM TComObject. Al patrulea și al cincilea parametru sunt liniile de nume și descriere ale clasei utilizate pentru înregistrarea clasei COM în registrul de sistem. Al șaselea parametru specifică instanța obiectului COM și, în final, ultimul parametru indică modelul firului obiectului.

O instanță a clasei TComObjectFactory este creată în secțiunea de inițializare a modulelor; în acest caz, fabrica de clasă va fi disponibilă pentru crearea instanțelor obiectului COM imediat după încărcarea serverului COM. Încărcarea serverului COM depinde de tipul său, adică dacă serverul este intern (DLL) sau extern (aplicație).







Articole similare

Trimiteți-le prietenilor: