About IStorage & IStream(200分)

  • 主题发起人 主题发起人 Zephyr
  • 开始时间 开始时间
Z

Zephyr

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中用到了 ActiveX 单元中的 IStorage 和 IStream,但最后我不
知该如何释放它们。IStorage 和 IStream都有一个继承自IUnknown的
_Release方法,但Delphi帮助文档中说:

Do not call the protected _Release method directly. _Release is
called through the IUnknown interface to indicate that another
object is through with the interfaced object抯 interface
pointer. This allows the interfaced object to free itself when
it is no longer used (when the reference count goes to zero).

如果我在一个过程中使用如下代码打开一个结构化文件(Structured
Storage File):

var
Stg: IStorage;
Stm: IStream;
Hr: HResult;
begin
Hr := StgCreateDocFile(..., ..., 0, Stg); // 打开文件
// 在此处对已打开的结构化文件进行操作
...
// 当我不再需要它时,该如何释放它?
end;

我曾试过不去做任何释放的工作,一样可以正常使用,但我总觉得该做点
什么。

各位大侠对此有何见解,请多多赐教。
 
不用释放,超出作用范围自己会释放。 也可为起=nil释放。
 
如果我所声明的IStorage变量是在整个程序运行的时候一直都存在,例如把它放
在TForm的Public或Private段内(我需要在程序运行过程中随时保存对
Storage 的改动),那么什么时候它才算是超出作用范围呢?在我释放窗体之前
不用释放它吗?
 
有没有谁能讲得更详细些?否则<B>200</B>分我就都给沈大侠了:-)
 
给他好了,我一般是直接 = nil的
不用自动释放
//好象在...
 
接受答案了.
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
I
回复
0
查看
573
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部