IPersistStorage::InitNew 方法 (objidl.h)
初始化新的存储对象。
语法
HRESULT InitNew(
[in] IStorage *pStg
);
参数
[in] pStg
指向要初始化的新存储对象的 IStorage 指针。 容器在其存储对象中创建嵌套存储对象 (请参阅 IStorage::CreateStorage) 。 然后,容器调用 WriteClassStg 函数,以使用 CLSID) 对象类标识符 (初始化新的存储对象。
返回值
此方法可以返回以下值。
返回代码 | 说明 |
---|---|
|
该方法已成功完成。 |
|
对象已由先前对 IPersistStorage::Load 方法或 IPersistStorage::InitNew 方法的调用初始化。 |
|
由于内存不足,存储对象未初始化。 |
|
由于内存不足以外的某种原因,未初始化存储对象。 |
注解
容器应用程序可以在需要初始化新对象(例如,使用 InsertObject 命令)时调用此方法。
支持 IPersistStorage 接口的对象在运行时必须随时有权访问有效的存储对象。 这包括在创建对象之后、使对象持久化之前的时间。 在此期间,对象的容器必须通过调用 IPersistStorage::InitNew 为对象提供指向存储的有效 IStorage 指针。 根据容器的状态,可能需要为此创建一个临时文件。
如果对象想要保留 IStorage 实例,则必须调用 AddRef 以递增其引用计数。
调用 IPersistStorage::InitNew 后,对象处于已加载或正在运行状态。 例如,如果对象类具有进程内服务器,则对象将处于运行状态。 但是,如果对象使用默认处理程序,则容器对 InitNew 的调用仅调用不运行对象的处理程序实现。 稍后,如果容器运行 对象,处理程序会为对象调用 InitNew 方法。
调用方备注
通常调用执行以下操作的 OleCreate 帮助程序函数,而不是直接调用 IPersistStorage::InitNew:- 调用 CoCreateInstance 函数以创建对象类的实例。
- 查询 IPersistStorage 接口的新实例。
- 调用 InitNew 方法以初始化 对象。
实施者说明
IPersistStorage::InitNew 的实现应执行以下步骤将对象初始化为其默认状态:- 预先打开并缓存指向对象需要将自身保存到此存储的任何流或存储的指针。
- 调用 AddRef 并缓存传入的存储指针。
- 调用 WriteFmtUserTypeStg 函数,将对象的本机剪贴板格式和用户类型字符串写入存储对象。
- 设置对象的脏标志。
如果此方法的实现在初始化后收到对 IPersistStorage::InitNew 方法或 IPersistStorage::Load 方法的调用,则应返回CO_E_ALREADYINITIALIZED错误代码。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | objidl.h |