Knihovna COM
Jakýkoli proces, který používá COM, musí inicializovat a uvolnit knihovnu COM. Kromě toho, že je specifikací, COM také obsahuje implementaci některých důležitých služeb v této knihovně. Poskytuje se jako sada knihoven DLL a exes (primárně Ole32.dll a Rpcss.exe) v systému Microsoft Windows, knihovna COM obsahuje následující:
Malý počet základních funkcí, které usnadňují vytváření aplikací COM jak na straně klienta, tak serveru. Pro klienty com poskytuje základní funkce pro vytváření objektů. Pro servery COM poskytuje prostředky k vystavení jejich objektů.
Služby lokátoru implementace, pomocí kterých COM určuje z identifikátoru jedinečné třídy (CLSID), který server tuto třídu implementuje a kde se tento server nachází. Tato služba zahrnuje podporu úrovně nepřímého přístupu, obvykle systémového registru, mezi identitou třídy objektu a balením implementace tak, aby klienti jsou nezávislí na balení, což se může v budoucnu změnit.
Transparentní vzdálená volání procedur, když je objekt spuštěný na místním nebo vzdáleném serveru.
Standardní mechanismus, který aplikaci umožní řídit, jak se paměť přiděluje v rámci procesu, zejména paměť, která musí být předána mezi spolupracujícími objekty, aby mohla být řádně uvolněna.
Aby bylo možné používat základní služby MODELU COM, musí všechna vlákna modelu COM v klientech a mimo procesových serverech volat buď CoInitialize, nebo CoInitializeEx funkce před voláním jakékoli jiné funkce COM s výjimkou volání přidělení paměti. CoInitializeEx nahrazuje jinou funkci přidáním parametru, který umožňuje určit model vláken: buď jako vlákno v apartmá, nebo jako volné vlákno. Volání CoInitialize jednoduše nastaví model threadingu na typ typu apartment-threaded.
Aplikace složeného dokumentu OLE volají funkci OleInitialize, která následně volá CoInitializeEx a provádí některé inicializace vyžadované pro složené dokumenty. Vlákna, která volají OleInitialize nemohou být bez vláken. Informace o vláknech v klientech a serverech naleznete v tématu Procesy, vlákna a apartmány.
Servery probíhajícího procesu nevolají inicializační funkce, protože se načítají do procesu, který je již spustil. V důsledku toho musí servery pracující v procesu nastavit svůj model vláken v registru pod klíčem InprocServer32. Podrobné informace o problémech s vlákny na procesových serverech najdete v tématu In-Process Problémy s vlákny serveru.
Je také důležité zrušit inicializaci knihovny. Pro každé volání CoInitialize nebo CoInitializeEx, musí existovat odpovídající volání CoUninitialize. Pro každé volání OleInitializemusí existovat odpovídající volání OleUninitialize.
Procesové servery mohou předpokládat, že proces, do kterého se načítají, už provedl tyto kroky.
Související témata