OleDoAutoConvert 函数 (ole2.h)

如果在注册表中设置了该对象类的自动转换,则会自动将对象转换为新类。

语法

HRESULT OleDoAutoConvert(
  [in]  LPSTORAGE pStg,
  [out] LPCLSID   pClsidNew
);

参数

[in] pStg

指向要转换的存储对象上的 IStorage 接口的指针。

[out] pClsidNew

指向要转换的对象的新 CLSID 的指针。 如果没有自动转换,这可能与原始类相同。

返回值

此函数可以返回标准返回值E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及以下值。

返回代码 说明
S_OK
无需转换或转换已成功完成。
REGDB_E_KEYMISSING
函数无法从注册表中读取密钥。
 

此函数还可以返回 OleGetAutoConvert 函数返回的任何错误值。 访问存储和流对象时,请参阅 IStorage::OpenStorageIStorage::OpenStream 方法,了解可能的错误。 如果无法确定现有 CLSID,或者无法使用新信息更新存储对象,请参阅 IStream 接口了解其他错误返回值。

注解

如果 OleSetAutoConvert 函数以前在注册表中指定了自动转换,则 OleDoAutoConvert 会自动转换对象。 对象转换意味着对象与新的 CLSID 永久关联。 自动转换通常由安装程序为新版本的对象应用程序指定,以便可以自动更新由其旧版本创建的对象。

调用 OleDoAutoConvert 时,存储对象必须处于卸载状态。

支持对象转换的容器应用程序应在每次加载对象时调用 OleDoAutoConvert 。 如果容器使用 OleLoad 帮助程序函数,则它不需要显式调用 OleDoAutoConvert ,因为 OleLoad 在内部调用它。

OleDoAutoConvert 首先通过调用 OleGetAutoConvert 函数确定是否需要任何转换,如果不需要转换,则返回S_OK。 如果对象需要转换, OleDoAutoConvert 会通过激活新的对象应用程序来修改和转换存储对象。 新的对象应用程序读取现有数据格式,但将对象保存为对象应用程序的新本机格式。

如果要自动转换的对象是 OLE 1 对象,则 ItemName 字符串存储在名为“\1Ole10ItemName”的流中。如果此流不存在,则对象的项名称为 NULL

要求

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

另请参阅

OleGetAutoConvert

OleSetAutoConvert