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: