CoTreatAsClass 函数 (objbase.h)
建立或删除模拟,其中一个类的对象被视为不同类的对象。
语法
HRESULT CoTreatAsClass(
[in] REFCLSID clsidOld,
[in] REFCLSID clsidNew
);
参数
[in] clsidOld
要模拟的对象的 CLSID。
[in] clsidNew
应模拟原始对象的对象的 CLSID。 这将替换 clsidOld 的任何现有仿真。 可以CLSID_NULL此参数,在这种情况下,将删除 clsidOld 的任何现有仿真。
返回值
此函数可以返回E_INVALIDARG的标准返回值,以及以下值。
返回代码 | 说明 |
---|---|
|
已成功建立或删除仿真。 |
|
clsidOld 参数未在注册数据库中正确注册。 |
|
从注册数据库读取时出错。 |
|
写入注册数据库时出错。 |
注解
此函数在注册表中为指定对象设置 TreatAs 条目,允许另一个应用程序模拟该对象。 模拟允许应用程序打开和编辑不同格式的对象,同时保留对象的原始格式。 设置此项后,每当任何函数(如 CoGetClassObject )指定对象的原始 CLSID (clsidOld) 时,它就会以透明方式转发到新的 CLSID (clsidNew) ,从而启动与 TreatAs CLSID 关联的应用程序。 保存对象时,可以采用其本机格式保存,这可能会导致原始格式不支持的编辑丢失。
如果应用程序支持仿真,请在以下情况下调用 CoTreatAsClass :
- 响应最终用户请求 (通过转换对话框) 将指定的对象视为不同类的对象, (在一个应用程序下创建的对象在另一个应用程序下运行,同时保留原始格式信息) 。
- 在安装程序中,注册一个对象类被视为不同类的对象。
在安装程序中使用 CoTreatAsClass 的示例是应用程序的更新版本。 更新应用程序时,可以激活使用早期版本创建的对象并将其视为新版本的对象,同时保留以前的格式信息。 这样,你可以为用户提供在保存时转换的选项,或将其保存为以前的格式,这可能会丢失旧版本中不可用的格式信息。
设置仿真的一个结果是,在枚举谓词时(如默认处理程序中的 IOleObject::EnumVerbs 方法实现中所示),这将从 clsidNew 而不是 clsidOld 枚举谓词。
若要确保在安装应用程序时删除现有仿真信息,安装程序应调用 CoTreatAsClass,并将 clsidNew 参数设置为 CLSID_NULL 以删除所安装类的任何现有仿真。
如果没有 CLSID 分配给注册表中的 AutoTreatAs 项,将 clsidNew 和 clsidOld 设置为相同的值会删除 TreatAs 条目,因此没有仿真。 如果向 AutoTreatAs 键分配了 CLSID,则会将该 CLSID 分配给 TreatAs 密钥。
CoTreatAsClass 不会验证 clsidNew 的相应注册表项当前是否存在。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | objbase.h |
Library | Ole32.lib |
DLL | Ole32.dll |