关于daocore.cpp错误的(着急)

shuiniaoqingren 2008-06-16 06:28:56
各位高手,由于要用DAO打开access2000(现在已经实现),但是在关闭程序时几乎每次都弹出Microsoft Visual C++ Debug Library的对话框,
告诉错误信息,说是daocore.cpp的42行【ASSERT(m_pDAODBEngine == NULL);】有错误。。

解决不了,请问高手这是什么原因。。
...全文
326 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pj220 2009-09-19
  • 打赏
  • 举报
回复
你是使用win32模版创建的应用程序的吧,如果是使用MFC向导创建的单文档、多文档、对话框应用程序,就不会出现这个问题。

单文档、多文档、对话框应用程序不会出现的原因是会执行CWinApp::ExitInstance(),里面有一句
// Cleanup DAO if necessary
if (m_lpfnDaoTerm != NULL)
{
// If a DLL, YOU must call AfxDaoTerm prior to ExitInstance
ASSERT(!afxContextIsDLL);
(*m_lpfnDaoTerm)();
}
(*m_lpfnDaoTerm)();实际上调用的就是AfxDaoTerm();

m_lpfnDaoTerm这个CWinApp的成员指针是这样被设置的:
1、当你创建CDatasource的时候,发现没有创建CDaoWorkspace于是,CDatasource创建默认的CDaoWorkspace
2、在上面创建默认的CDaoWorkspace的时候发现没有创建全局的DAODBEngine,于是就
调用 CDaoWorkspace::InitializeEngine()创建默认的DAODBEngine,CDaoWorkspace::InitializeEngine()实际上就是调用AfxDaoInit();
3、在AfxDaoInit()调用里,这个默认的DAODBEngine被m_pDAODBEngine指向。然后
设置CWinApp::m_lpfnDaoTerm = &AfxDaoTerm;以便在CWinApp::ExitInstance()里可以执行
AfxDaoTerm();

如果是普通的win32 API程序或者控制台程序(没有CWinApp theApp声明),那么你必须手动调用AfxDaoTerm();因为没有什么办法能自动调用AfxDaoTerm();

控制台程序(即使你有CWinApp theApp)也必须手动调用AfxDaoTerm();
这是因为虽然你有CWinApp theApp声明,但是它的析构函数并不会调用CWinApp::ExitInstance()。
也就是说不会调用到AfxDaoTerm();所以你仍然需要手工调用AfxDaoTerm();

普通的win32 API程序或者控制台程序,与之相对应的AfxDaoInit();你却不必显示的再你的代码中显示调用,因为他们会被自动调用。

希望以上说明会对你有帮助。
woshihuzi 2008-10-18
  • 打赏
  • 举报
回复
我也有同样的问题。
程序运行期间正常,关闭程序之后跳出来这个错误。
shuiniaoqingren 2008-06-17
  • 打赏
  • 举报
回复
帮忙呀,高手们。。
shuiniaoqingren 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shuiniaoqingren 的回复:]
引用 2 楼 k2eats 的回复:
C/C++ code
离开function前加上
AfxDaoTerm();

问题是...msdn里面说
这个function会自动执行(也许compiler会自动加上去)..不需要user加上去啊....

http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=vc&id=30076
[/Quote]

加上这个后,不在daocore.cpp的42行【ASSERT(m_pDAODBEngine == NULL);】出错了,但是
现在进行其他操作后,出现另一个Microsoft Visual C++ Debug Library的对话框。
APPCORE.cpp的377行【ASSERT(!afxContextIsDLL);】出错了,我都愁死了。。

这个该如何解决呀 :(
shuiniaoqingren 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 elovenana 的回复:]
ASSERT(m_pDAODBEngine == NULL);只有m_pDAODBEngine != NULL的时候,才会执行到;或许,m_pDAODBEngine与NULL根本不能相比较;我怀疑是 m_pDAODBEngine ,没有被初始化或者是指向任处,不得而知
像是

C/C++ code
float *f;
if(f==NULL)
{
printf("%s\n","ok");
}



这里的f根本就没有初始化
[/Quote]
但是如何解决呀,现在找不到解决方案呀。。
长安宁 2008-06-17
  • 打赏
  • 举报
回复
ASSERT(m_pDAODBEngine == NULL);只有m_pDAODBEngine != NULL的时候,才会执行到;或许,m_pDAODBEngine与NULL根本不能相比较;我怀疑是 m_pDAODBEngine ,没有被初始化或者是指向任处,不得而知
像是

float *f;
if(f==NULL)
{
printf("%s\n","ok");
}

这里的f根本就没有初始化
shuiniaoqingren 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 k2eats 的回复:]
C/C++ code
离开function前加上
AfxDaoTerm();

问题是...msdn里面说
这个function会自动执行(也许compiler会自动加上去)..不需要user加上去啊....

http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=vc&id=30076
[/Quote]
但是我调用了AfxDaoTerm()后出现经常.exe关闭的情况,不是以前的debug错误了。。

我打log是进到AfxDaoTerm()这个函数后没出来死掉的,这怎么办呀 :(

急死了。。。
shuiniaoqingren 2008-06-17
  • 打赏
  • 举报
回复
高手们,救命呀,我真的解决不了了。。
shuiniaoqingren 2008-06-17
  • 打赏
  • 举报
回复
没有人会了吗?

高手呀,帮忙。。
ddll184 2008-06-17
  • 打赏
  • 举报
回复
顶一下。。我也有同样的问题。。大家来帮忙啊
K行天下 2008-06-16
  • 打赏
  • 举报
回复

离开function前加上
AfxDaoTerm();

问题是...msdn里面说
这个function会自动执行(也许compiler会自动加上去)..不需要user加上去啊....

http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=vc&id=30076
xkyx_cn 2008-06-16
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/143084/zh-cn

希望能帮到你

65,195

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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