创建Registration-Free COM 对象

激活上下文允许使用 COM 对象,而无需注册它们。 这使应用程序能够基于其版本(而不是注册表信息)拥有具有不同功能的多个组件。 多个组件可以使用相同的 GUID 公开同一 COM 对象,但根据版本具有不同的功能。

当应用程序从 CLSIDFromProgID 请求 GUID 时,COM 首先在活动激活上下文中搜索从 progid 到 CLSID 的映射。 当应用程序使用 CoCreateInstance 获取实例接口指针时,COM 在活动激活上下文中搜索以查找将托管 CLSID 的 DLL。 如果激活上下文不包含所需的信息,则 COM 将使用常用方法在注册表中搜索信息。

请注意,由于激活上下文是每个线程的,因此 COM 会将创建线程的激活上下文封送给主机线程,并在主机线程上调用 LoadLibraryDllGetClassObject 之前激活它。 此功能已存在于 Windows 中,客户端代码无需执行任何操作即可实现此功能。

COM 类可由托管组件导出,而无需通过注册表。 多个组件可以为不同的 COM 对象公开相同的 ProgID,托管应用程序应仅找到正确的激活上下文,然后使用 CLSIDFromProgIDCoCreateInstance 获取托管对象的接口指针。