comexception

吉云

今天这事儿真是把我给折腾坏。搞一整天,发现是个COMException的问题,真的是头都大。我这程序跑得好好的,突然就给我罢工,报个错,说是“*.COMException”,还说什么“被调用的对象已与其客户端断开连接”。我当时就懵,这啥玩意儿?完全摸不着头脑。

我寻思着,这问题肯定不简单,得好好查查。我就开始各种倒腾,各种试。我还以为是网络问题,毕竟有时候网络不稳定,也会导致一些奇奇怪怪的问题。我就把网线拔又插,路由器也重启好几遍,结果还是没用。这下我更郁闷,这也不是,那也不是,到底咋回事?

然后,我就开始在网上各种搜,看看有没有遇到类似问题的朋友。你别说,还真让我找到一些相关的帖子。有的说是啥“无状态服务结构”里返回对象图时会出这种问题,有的说是访问啥Active Directory时出现,还有的说可能是互操作性问题,总之是五花八门,啥说法都有。看得我是眼花缭乱,脑袋都大。其中有个啥“DirectoryServicesCOMException”的玩意,看下,我这好像没用到这玩意。

comexception

我还看到有人提到啥“获取用户的登录ID”,我这里也没这个操作,怎么会报这个错。还有一个,是说在啥PowerPoint加载项里调用啥“*()”时也会有这个COMException错误,说是接口啥的问题。我这里也不是PowerPoint加载项,八竿子打不着边。

后来我冷静下来,仔细想想,觉得这问题可能是出在我程序里某个地方跟别的组件交互的时候。我就开始一段一段地排查代码,看看哪里有跟外部组件交互的地方。这一查,还真让我发现点猫腻。我发现有一段代码,在处理一个COM对象的时候,没有正确地释放资源。我想,这可能就是问题的根源!

  • 第一步: 我先把那段代码给注释掉,然后重新运行程序。你猜怎么着?程序居然正常运行!看来问题就是出在这里。
  • 第二步: 我就开始仔细研究这段代码,看看怎么才能正确地释放COM对象。我查好多资料,发现原来COM对象得用特定的方法来释放,不能随便就丢在那里不管。
  • 第三步: 按照资料上说的,我在代码里加几行释放COM对象的代码,然后再次运行程序。这回程序终于完美运行,再也没有出现那个讨厌的COMException错误。
  • comexception

这事儿真是给我上一课。以后写代码,一定要注意资源的释放,特别是这种跟外部组件交互的时候,更要小心谨慎。不然,一个小小的疏忽,就可能导致大大的麻烦。不过话说回来,通过这回排查问题,我对COM对象也有更深的解,也算是因祸得福。

这回遇到的问题,总的来说是啥COMException异常,然后程序崩溃,不过最终还是解决。以后再遇到这类问题,至少心里有底,知道该从哪些方面入手排查。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]