com抛出异常的难题
代码暂时就不贴了,因为太大了,不过有个百分之百复现的现象。希望能得到高人指点一二。(注:本人对COM还不十分了解)
情况是这样:写了一个com,该com里又用ado写了一个数据库操作。仅有几个接口:打开数据库,关闭数据库,查询,执行sql语句。有两个进程用到了这个com。
单个进程com的初始化到回收,访问数据库都没有问题,都是正常的。两个进程的com均未回收前,访问数据库都是正常的。但若先是两个进程初始化了com,之后,一个进程先回收了com。另一个进程访问数据库就出现了异常,抛出的异常用catch(_com_error e)捕获不到。
目前,我知道原因的,用catch(_com_error e)捕获不到的异常。就一个:就是线程不同步,在com回收之后还在执行com中的接口中的代码。但是,上面的情况是两个进程间,并各自引用了com。一个进程回收了com,怎么会影响到另一个进程的访问。实在是令我不解。急迫希望高手来救火。
[解决办法]
你的COM Object是不是singleton的?
[解决办法]
你创建的是进程内组件还是进程外组件了?进程内组件应该是没问题的。不知道调用ADO的时候是不是一定要CoInitialize方法了,你试下
[解决办法]
为什么要这么操作
如果这样的话应该是你的com聚合ado
否则可能会出问题
主要是多进程操作时引用计数的控制
[解决办法]
这样说明你的ADO是共享一组内存的。。。假如不共享了就要考虑到冲突问题,改一下,用指针,都MALLOC一段内存试试看。。