一个COM对象是允许多处引用的,因此不允许直接终止,以免影响其它的引用.为此,COM提出了引用计数的方法,每一个引用者将它的引用计数加一,用完后减一,当所有的引用者都不在使用它时,引用计数被减到0,对象就会被释放.
在Delphi中,引用计数是自动维护的.当你把一个COM对象(接口)赋值给另一个变量时,引用计数自动加一;当你对一相接口类型变量赋值时,如果该变量原值不是NIL,原值的引用计数自动减一.
如果一定要终上一个COM对象,可以这样做(当心,危险!):i := aobj._AddRef;
while i > 1 do
i := aobj._Release;
aobj := nil;
上面的代码是先调用了_AddRef,,判断条件是i>1,都是考虑到Delphi对引用计数的自动维护,以免导致对象被终止后Delphi又去把它的引用计数减一而产生内存访问异常.如果是在C++中就可以这样写:
while (aobj->Release());
就行了.
在Delphi中,引用计数是自动维护的.当你把一个COM对象(接口)赋值给另一个变量时,引用计数自动加一;当你对一相接口类型变量赋值时,如果该变量原值不是NIL,原值的引用计数自动减一.
如果一定要终上一个COM对象,可以这样做(当心,危险!):i := aobj._AddRef;
while i > 1 do
i := aobj._Release;
aobj := nil;
上面的代码是先调用了_AddRef,,判断条件是i>1,都是考虑到Delphi对引用计数的自动维护,以免导致对象被终止后Delphi又去把它的引用计数减一而产生内存访问异常.如果是在C++中就可以这样写:
while (aobj->Release());
就行了.
解决方案 »
- 在只装有wps的情况下,delphi6.0怎么实现.xls文件的导入功能
- DbGridEh中,adoQuery的Sql语句如果有order by,为什么点击标题排序会出错?
- SPCOMM中给它的属性赋置时,类型怎么转换???
- Treeview 的数据库建树
- 如何给DBGRID增加这样的列?
- 用过ODAC控件的请进
- 关于使用COM+和MIDAS开发ERP系统的问题
- 请问如何得到EDIT控件中光标的物理位置?急!!!!!立刻给分
- 怎样使用 Flatstyl ???
- Winamp(还有oicq2000,MSN explore等)的更换skin用的是什么技术?
- FastReport中怎样设计单个数据源的分组报表?
- 用WebSnap开发网络应用,处理数据连接的问题
帮你UP一下吧!