Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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ő