在dll中调用com组件程序崩溃!!!???(急救)

zhengstar 2004-03-17 12:29:20
我写了一个mfc regular dll,在InitInstance中调用CoInitializeEx(..),然后用ADO打开一个数据库连接。在ExitInstance中关闭数据库连接,然后调用CoUninitialize()。在关闭数据库连接时程序崩溃,错误是访问违规!!!
注:就打开数据库和关闭数据库,没有任何其他操作


为什么会崩溃呢?实在想不通!!
...全文
226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengstar 2004-03-29
  • 打赏
  • 举报
回复
问题最终回避了,
忘了告诉环境了:隐式连接dll,出错,显式调用时就没有问题

原因:可能和隐式连接dll有关系,隐式连接dll时,在程序运行winmain函数之前就加载了,
而在程序结束时,程序调用ExitInstance函数的时机就不是我们控制的了,有可能此时进程已经把com库给干掉了,所以会出错。
zhengstar 2004-03-17
  • 打赏
  • 举报
回复
此时还没有调用到CoUninitialize,关闭连接是在调用该函数的上面,而关闭连接时崩溃了
purpleclouds 2004-03-17
  • 打赏
  • 举报
回复
不要调用,
CoUninitialize
可能组件还没释放
tigerVC 2004-03-17
  • 打赏
  • 举报
回复
一般情况是你在关闭数据库里,你的数据库已经没有访问权限,数据库可能已卸载
快乐鹦鹉 2004-03-17
  • 打赏
  • 举报
回复
是不是在其他地方,数据库已经被关闭了。你调试检查一下,关闭时的数据库对象是不是有问题。
cxghj 2004-03-17
  • 打赏
  • 举报
回复
贴出你的代码看看
薛定谔之死猫 2004-03-17
  • 打赏
  • 举报
回复
关注
rivershan 2004-03-17
  • 打赏
  • 举报
回复
选择Automation了么?
还有MSDN说:

When you choose the Automation option in AppWizard, the wizard provides you with the following:

A starter object description language (.ODL) file.


An include directive in the STDAFX.H file for AFXOLE.H.


An implementation of the DllGetClassObject function, which calls the AfxDllGetClassObject function.


An implementation of the DllCanUnloadNow function, which calls the AfxDllCanUnloadNow function.


An implementation of the DllRegisterServer function, which calls theCOleObjectFactory::UpdateRegistryAll function.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧