OleDoAutoConvert 函数 (ole2.h)
如果在注册表中设置了该对象类的自动转换,则会自动将对象转换为新类。
语法
HRESULT OleDoAutoConvert(
[in] LPSTORAGE pStg,
[out] LPCLSID pClsidNew
);
参数
[in] pStg
指向要转换的存储对象上的 IStorage 接口的指针。
[out] pClsidNew
指向要转换的对象的新 CLSID 的指针。 如果没有自动转换,这可能与原始类相同。
返回值
此函数可以返回标准返回值E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及以下值。
返回代码 | 说明 |
---|---|
|
无需转换或转换已成功完成。 |
|
函数无法从注册表中读取密钥。 |
此函数还可以返回 OleGetAutoConvert 函数返回的任何错误值。 访问存储和流对象时,请参阅 IStorage::OpenStorage 和 IStorage::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 |