在程序中调用了多个ActiveX的动态库和ATL的动态库,其中ActiveX动态(MFC的)库使用了ATL动态库中的COM对象,按理说,ATL动态库应该在ActiveX动态卸载后再卸载,但是事实上动态库的卸载顺序具有一定的随机性,造成有时候在ActiveX动态库中释放COM对象出错(因为此事COM动态库已经terminate了!)。程序有时正常,有时不正常,请问有没有高手知道其中原因,请解答,不甚感激。

解决方案 »

  1.   

    不会把,你没有Release它,它如何会被释放?按你需要的顺序Release不就可以了吗?
      

  2.   

    不知道你为什么要去考虑com的卸载顺序,
    但COM的确不是马上释放,而是被加载
    到一个释放的队列上头!
      

  3.   

    确保在COM模块内部之间,总是使用COM的Interface来相互调用。而不要用Class的指针来防问成员变量或函数。另外,如果没有COM对象的计数器没有完全被Release成零,相对应的DLL是不会被释放掉的。所以如果你说的那种现象,说明在调用时肯定没有正确调用AddRef和Release。