Sdílet prostřednictvím


Inicializace knihovny COM

Jakýkoli program systému Windows, který používá com musí inicializovat knihovnu COM voláním CoInitializeEx funkce. Každé vlákno, které používá rozhraní COM, musí provést samostatné volání této funkce. coInitializeEx má následující podpis:

HRESULT CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);

První parametr je rezervovaný a musí být null. Druhý parametr určuje model vláken, který bude program používat. COM podporuje dva různé modely threadingu, apartment threaded a multithreaded. Pokud určíte vláknění bytu, poskytujete následující záruky:

  • Ke každému objektu COM budete přistupovat z jednoho vlákna; nebudete sdílet ukazatele rozhraní MODELU COM mezi více vlákny.
  • Vlákno bude mít zprávovou smyčku. (Viz zprávy okna v modulu 1.)

Pokud některé z těchto omezení není pravdivé, použijte model s více vlákny. Pokud chcete určit model vláken, nastavte jeden z následujících příznaků v parametru dwCoInit.

Vlajka Popis
COINIT_APARTMENTTHREADED Propletený byt.
COINIT_MULTITHREADED Vícevláknových.

 

Musíte nastavit přesně jeden z těchto příznaků. Obecně platí, že vlákno, které vytvoří okno, by mělo používat příznak COINIT_APARTMENTTHREADED a další vlákna by měla používat COINIT_MULTITHREADED. Některé komponenty modelu COM však vyžadují konkrétní model threadingu.

Poznámka

Ve skutečnosti, i když určíte kompartmentální vláknování, je stále možné sdílet rozhraní mezi vlákny pomocí techniky nazývané marshalování. Marshallování je nad rámec tohoto modulu. Důležitým bodem je, že u vlákna apartmánu nikdy nesmíte jednoduše kopírovat ukazatel rozhraní na jiné vlákno. Další informace o modelech vláken COM naleznete v sekci Procesy, vlákna a apartmány.

 

Kromě již zmíněných příznaků je vhodné nastavit příznak COINIT_DISABLE_OLE1DDE v parametru dwCoInit. Nastavení tohoto příznaku zabraňuje určité režii spojené s objektovým propojením a vkládáním (OLE) 1.0, zastaralé technologie.

Tady je postup, jak byste inicializovali COM pro bytové vlákno:

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

Návratový typ HRESULT obsahuje kód chyby nebo úspěchu. V další části se podíváme na zpracování chyb modelu COM.

Deinicializace knihovny COM

Pro každé úspěšné volání CoInitializeExje nutné volat CoUninitialize před ukončením vlákna. Tato funkce nepřijímá žádné parametry a nemá žádnou vrácenou hodnotu.

CoUninitialize();

Další

Kódy chyb v modelu COM