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


A COM-kódtár inicializálása

A COM-t használó Windows-programoknak inicializálni kell a COM-kódtárat a CoInitializeEx függvény meghívásával. A COM-felületet használó összes szálnak külön hívást kell kezdeményeznie ehhez a függvényhez. CoInitializeEx a következő aláírást tartalmazza:

HRESULT CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);

Az első paraméter foglalt, és NULLkell lennie. A második paraméter a program által használt szálmodellt adja meg. A COM két különböző szálkezelési modellt támogat, apartman szálas és többszálas. Ha lakásfonatot ad meg, a következő garanciákat vállalja:

  • Az egyes COM-objektumokat egyetlen szálból fogja elérni; nem fogja megosztani a COM-felület mutatóit több szál között.
  • A szál egy üzenethurokot fog tartalmazni. (Lásd Ablaküzenetek az 1. modulban.)

Ha valamelyik kényszer nem igaz, használja a többszálú modellt. A szálmodell megadásához állítsa be az alábbi jelölők egyikét a dwCoInit paraméterben.

Zászló Leírás
COINIT_APARTMENTTHREADED Lakás szálas.
COINIT_MULTITHREADED Többszálú.

 

Pontosan egy ilyen jelzőt kell beállítania. Az ablakot létrehozó szálnak általában a COINIT_APARTMENTTHREADED jelzőt kell használnia, a többi szálnak pedig COINIT_MULTITHREADEDkell használnia. Egyes COM-összetevők azonban egy adott szálmodellt igényelnek.

Jegyzet

Valójában, még akkor is, ha megadja lakás szál, akkor is lehetséges, hogy megosszák interfészek között szálak, az úgynevezett marshaling. A marshaling túllépi a modul hatókörét. A lényeges pont az, hogy apartment threading esetén soha nem szabad egy interfészmutatót egyszerűen átmásolni egy másik szálra. További információ a COM szálmodellekről: Folyamatok, Szálak és Apartmanok.

 

A már említett jelzők mellett érdemes beállítani a COINIT_DISABLE_OLE1DDE jelzőt a dwCoInit paraméterben. A jelző beállítása elkerüli az elavult technológia, az Object Linking and Embedding (OLE) 1.0 használatával járó többletterhelést.

Az alábbiak szerint inicializálná a COM-t a lakás szálkezeléséhez:

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

A HRESULT visszatérési típusa hibát vagy sikerkódot tartalmaz. A COM-hibakezelést a következő szakaszban tekintjük meg.

A COM-kódtár deinitializálása

A CoInitializeExminden sikeres hívásához meg kell hívnia CoUninitialize, mielőtt a szál kilép. Ez a függvény nem vesz fel paramétereket, és nincs visszatérési értéke.

CoUninitialize();

Következő

hibakódok a COM