MFC DLL 中调用ADO的Close方法时出现access violation错误

       在MFC DLL 中调用了 封装了ado的数据库操作类MyADO,定义了一个 全局的MyADO类变量。

     在DLL测试程序(静态调用)中,每次退出程序时总是报(msdart.dll)0xC0000005:Access   violation的异常。    调试时发现执行到ADO的Connection的Close方法时就会出现上述错误。     注:COM已初始化

    可能是Close方法写在MyADO类的析构函数中,而在DLL中的MyADO类变量是全局的,可能在关闭程序时先调用CoUninitialize,再调用其析构函数因COM环境已释放而出现内存访问出错。

    经过一番搜索,想到解决方法是:

    M1:在 MyADO类中新增方法 Destroy、把Connection的Close方法写此方法中,然后再在MFC DLL的App类的ExitInstance()方法中调用MyADO类的Destroy() 方法.这样就OK了。 (MFC DLL 是有App类的)

    M2:定义成App类的成员变量

 

    对于非基于MFC 的Win32 DLL工程, 把MyADO类变量定义指针,MyADO * myDB; 在 DllMain函数中处理。

Code

 

 

Reference: 

  1. http://topic.csdn.net/t/20050621/11/4096107.html
  2. http://topic.csdn.net/u/20080322/18/af2ff681-3832-4738-8ccf-35a3f8fd1bff.html
  3. http://topic.csdn.net/t/20020327/09/602528.html
  4. http://topic.csdn.net/t/20030721/17/2054300.html
     
posted @ 2008-12-08 00:01  天下无霜  阅读(1771)  评论(0编辑  收藏  举报