CoTreatAsClass 函数 (objbase.h)

建立或删除模拟,其中一个类的对象被视为不同类的对象。

语法

HRESULT CoTreatAsClass(
  [in] REFCLSID clsidOld,
  [in] REFCLSID clsidNew
);

参数

[in] clsidOld

要模拟的对象的 CLSID。

[in] clsidNew

应模拟原始对象的对象的 CLSID。 这将替换 clsidOld 的任何现有仿真。 可以CLSID_NULL此参数,在这种情况下,将删除 clsidOld 的任何现有仿真。

返回值

此函数可以返回E_INVALIDARG的标准返回值,以及以下值。

返回代码 说明
S_OK
已成功建立或删除仿真。
REGDB_E_CLASSNOTREG
clsidOld 参数未在注册数据库中正确注册。
REGDB_E_READREGDB
从注册数据库读取时出错。
REGDB_E_WRITEREGDB
写入注册数据库时出错。

注解

此函数在注册表中为指定对象设置 TreatAs 条目,允许另一个应用程序模拟该对象。 模拟允许应用程序打开和编辑不同格式的对象,同时保留对象的原始格式。 设置此项后,每当任何函数(如 CoGetClassObject )指定对象的原始 CLSID (clsidOld) 时,它就会以透明方式转发到新的 CLSID (clsidNew) ,从而启动与 TreatAs CLSID 关联的应用程序。 保存对象时,可以采用其本机格式保存,这可能会导致原始格式不支持的编辑丢失。

如果应用程序支持仿真,请在以下情况下调用 CoTreatAsClass

  • 响应最终用户请求 (通过转换对话框) 将指定的对象视为不同类的对象, (在一个应用程序下创建的对象在另一个应用程序下运行,同时保留原始格式信息) 。
  • 在安装程序中,注册一个对象类被视为不同类的对象。
第一种情况的一个示例是,最终用户可能希望使用可读取和写入原始应用程序的电子表格格式的不同应用程序编辑由一个应用程序创建的电子表格。 对于支持仿真的应用程序,可以调用 CoTreatAsClass 以在转换对话框中实现 “视为 ”选项。

在安装程序中使用 CoTreatAsClass 的示例是应用程序的更新版本。 更新应用程序时,可以激活使用早期版本创建的对象并将其视为新版本的对象,同时保留以前的格式信息。 这样,你可以为用户提供在保存时转换的选项,或将其保存为以前的格式,这可能会丢失旧版本中不可用的格式信息。

设置仿真的一个结果是,在枚举谓词时(如默认处理程序中的 IOleObject::EnumVerbs 方法实现中所示),这将从 clsidNew 而不是 clsidOld 枚举谓词。

若要确保在安装应用程序时删除现有仿真信息,安装程序应调用 CoTreatAsClass,并将 clsidNew 参数设置为 CLSID_NULL 以删除所安装类的任何现有仿真。

如果没有 CLSID 分配给注册表中的 AutoTreatAs 项,将 clsidNewclsidOld 设置为相同的值会删除 TreatAs 条目,因此没有仿真。 如果向 AutoTreatAs 键分配了 CLSID,则会将该 CLSID 分配给 TreatAs 密钥。

CoTreatAsClass 不会验证 clsidNew 的相应注册表项当前是否存在。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objbase.h
Library Ole32.lib
DLL Ole32.dll

另请参阅

CoGetTreatAsClass