请问如何管理和删除COM中创建的对象?
我编写了几个自己的类,为了能够在其它语言中使用这些类,就用COM做了封装,比如:
用IMyObj封装了CMyObj,可以在Delphi/VB中使用COM来生成类对象,
关于COM对象的释放,由于系统有addref/removelref机制,我不担心这些对象本身的释放与删除。
但是由于我不知道如何去捕获COM被删除/撤销的事件,COM中创建的对象和申请的内存不知道如何去释放!
有遇到类似问题的么?给点建议,多谢!
问题点数:100、回复次数:6Top
1 楼xiaohyy(醉大饿极)回复于 2003-12-04 18:48:12 得分 5
调用Release后看是否返回0。。如果返回0则该com对象表示释放了Top
2 楼newkey007(无限天空 www.xDrv.com)回复于 2003-12-04 22:10:02 得分 1
COM 的生命周期不是要你来管理的
申请的内存 CoTaskAllocMemory
Top
3 楼newkey007(无限天空 www.xDrv.com)回复于 2003-12-04 22:12:57 得分 88
当 引用计数 =0 的时候
他会执行 FinalRelease()
你可以在这里处理
当对于COM中涉及到了交叉引用, 要麻烦些 , 得自己写个函数Top
4 楼joachern(程序人生)回复于 2003-12-05 08:47:30 得分 5
就是!Top
5 楼xiaohedou(小河豆(充电中.18%.))回复于 2003-12-05 15:21:14 得分 1
在COM内部开的内存当然要由COM自己来管理!这个与你在什么环境里调用无关。至于“如何去捕获COM被删除/撤销的事件”:如果程序是你写的,用SEP来管理。tyr/catch/throw的组合。
search MSDN|Structured Exception Handling!Top
6 楼bakerking(程序面包)回复于 2003-12-05 22:23:59 得分 0
多谢大家,我需要的就是 newkey007(无限天空) 老兄提供的方法
在COM对象的 finalrelease 中我设置了如下代码:
if(m_ptr!=NULL) delete m_ptr;
问题解决了!
多谢多谢!Top




