我正在研究一组本质上是插件的东西,它们是COM服务器。每个插件都有一组配置数据,由另一个组件管理,配置数据的主键是插件的ProgID。当插件需要访问配置项时,它会进行调用并传入其ProgID和所需属性的名称。这是一个传统设计,我必须保持向后兼容性。
我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个独特的ProgID,每个ProgID都指向插件的单个ClsId。因此,插件的每个实例都将由其ProgID识别,ProgID仍然用作配置数据的主键,并且所有内容都是100%向后兼容。
所以,问题:
答案 0 :(得分:4)
Prog ID通常以两种方式使用:检测对应于prog id(CLSIDFromProgID()函数)的类id - 这用于稍后调用CoCreateInstance() - 并检测给定类id的prog id - 这通常用于显示类ID的人性化版本。
这些映射意味着HKCR {ProgId} \ CLSID键的默认值等于类id,HKCR \ CLSID {classid} \ ProgID键的默认值等于ProgId,这意味着映射是一对一的。您将无法在一个类ID下拥有多个prog id。
通过调用CoCreateInstance()来加载COM组件,该组件使用包含的CLSIDFromProgID()以任何可能的方式获取类ID。组件无法告诉如何获得类ID。