IUnknown felület - így nem hiszem, te más vagy, mint egyébként
Milyen gyorsan (nekem) futási idő - és most már a küszöbön a IUnknown. Hogyan lassú (neked) futási idő - mi csak van valami, csak hogy IUnknown küszöböt. De mégis, itt vagyunk a küszöbén „súlyos COM”.
Így - IUnknown felület a fő felület, amelynek alapja a COM. Kötelessége, hogy végre olyan COM nevű objektumot, akkor köteles jelen lenni bármely részén a felület, a kiállított tárgy. De IUnknown - egy nagyon különleges felület, ha van szem előtt, nem a láthatóságot a része az ügyfél és annak végrehajtását a kiszolgáló objektumot. És a fő jellemzői a IUnknown tartjuk ezt a cikket.
Kapcsolat a legjobb kezdeni a pontos leírás. A pontos specifikációja IUnknown interfész tartalmazza a header fájlt C ++ nevű
IUnknown felület „GUID”:
Miért módszerek IUnknown - részletesen vizsgálja korábban. Tehát most úgy csak ezeket a módszereket kell végrehajtani. Kezdjük az eljárást.
AddRef módszer. Úgy tervezték, hogy elősegítse a referencia száma. Vissza kell térnie az új érték a referencia száma - 1, és n, de ezt az értéket csak a hibakeresés. A Microsoft azt mondja, hogy néha az érték lehet a „stabil”. Ami azt jelenti, „stabil” - Nem tudom. Úgy látszik, azt jelentette, hogy egy többszálú környezetben pontosan számláló értéke ismert, csak a számláló, hogy védve van egyidejű hozzáférést több szál egyszerre. De a jelentősége a jelenlegi számláló értéket adták ki bármely stream azonnal meg kell semmisíteni a párhuzamos áramlás. Tény, hogy a szó a számláló a kliens oldalon valóban csak a hibakeresés, semmi mást nem lehet építeni ezt az értéket.
Release módszer. Amelynek célja a kapcsolatok vissza számláló egységet. Visszaadja az új (poszt Csökkentés) értéke a számlálóját, amely szintén lehet használni hibakeresési célokból. Ebben az esetben, ha a számláló eléri a nullát - a végrehajtás a módszer lényege, hogy az erőforrások felszabadítása, primitív szólva -, hogy elpusztítsa az objektumot.
És itt meg kell figyelni - hogy AddRef és kapcsolja ki az interfész ugyanazt a hivatkozási szám - a hivatkozási szám az egész létesítmény. Ie végrehajtása ezek a módszerek, és lehet egy az egész objektumot.
De akkor meg kell gondolni egy kicsit. Ami igazán értünk a kifejezés: „a módszert az erőforrások felszabadítása”? Mert egyszerű a design és a modell objektumok természetesen egyenértékű az eltávolítása a tárgy kapott az új tranzakciós szerver. De az összetett objektumokat, ez nem lehet igaz - néhány interfészek (. Ezek az úgynevezett letéphető „letéphető”) egy összetett objektum végre egy „külön”, azaz nem kezd velük a forrásokat, hogy megteremtse az objektumot, és megkapja a forrásokat csak akkor, ha valaki megkérdezi, kapcsolják össze, hogy a felület. Ebben az esetben a módszerek AddRef és Release lesz kénytelen szolgálni két és hivatkozási szám - teljes az egész létesítményt, és saját, csak az ilyen felületek részeként az objektumot. És csak szakaszosan, mint a tárgya egyre források, Release felszabadítja őket. Ebben az esetben a „források”, azt jelenti, nem csak a dinamikus memóriát. Például az interfész megvalósítása tudja nyitni a fájlt, hogy létrehoz egy hálózati kapcsolat, stb Ezeket a forrásokat is fel kell szabadítani elvesztése esetén az összes link a felületen.
Bizonyos tárgyak (és soha nem lehet tudni, és akkor kell végrehajtani az ilyen létesítményeket?), Mint CBanzai tárgya példa №1. amely egy statikus tárgy modul szinten „self-gyilkos” nem szükséges. De a referencia száma erre az épületre kell folytatni mind az ügyfelek és az index fogja hívni AddRef / Release. bár ebben az esetben nem csinál semmit. Az elv fenn kell tartani - az ügyfél nem tudja, hogy a szerver objektum végrehajtását. Az ügyfél csak annyit tud a felület, amelyen keresztül együttműködik az objektumot. És meg kell felelnie a protokollt.
Látod - minden nagyon egyszerű, racionális, ésszerű. Például nem értem (ez öt év után a használata a COM és programok írásának használja :) semmi érthetetlen - létezik-e bármilyen szerkezeti jellemzők találtunk amelynek okát nem tudtuk megszabadulni - ezért van kialakítva és ennek megfelelően kell végrehajtani.
Sőt, most már írni a második példa - a példa, amelyben a tárgyak tervezési hibák az első példa kijavításra kerülnek szoftver mechanizmus, amely az imént tanult. Ez lehetővé teszi a létesítmények valóban „igazi COM objektumok”, de sajnos még nem teszi lehetővé, hogy megszabaduljon az emulátor CoCreateInstance - kevés COM objektumok, amelyek szükségesek, hogy éltek „ez COM -server”. És „ez COM -server” még mindig tudni csak az egyik a négy realizált és ki vannak téve számukra, hogy a rendszer funkcióit - DllGetClassObject. Ezért amint működésének vizsgálatát a példa, haladunk tovább a következő témában - tervezés COM -server. Illik az esettanulmány „a COM objektumok, a” filozófia el kell halasztani addig, amíg később.