由于dll中有使用DAO建立access数据库,所以DLL使用MFCDLL的模板做的使用动态mfc的规则dll。可是这个程序在MFC程序运行正常,在我机器上的win32程序中调用也正常,转移到其他机器上就提示CDaoException。可是我在调试dll时都是能正确执行的,调用完dll退出程序return 0时会弹出一个输入crt0.c路径的提示。dll要实现的建立数据库导入数据功能,查找文件夹下相应的mdb文件和输入内容也是可以正确导入的。网上说出现这错误可能是调用dll后资源没被释放的缘故,msdn上关于dll中使用dao的说明中提到尽量使用动态分配空间,在AfxDaoTerm之前释放已经分配空间。我将代码检查过动态分配的空间也都在退出前删除了。请各位达人指教一下,我已经在这问题上纠结了4,5天了。

解决方案 »

  1.   

    用try捕获了异常吗?显示的异常内容是什么??
      

  2.   

    执行DAO操作的地方都设置了try catch可是都未捕获到异常。
      

  3.   

    调试的时候也只是在调用完DLL后主程序退出时发生错误
      

  4.   

    现在基本定位出错原因了
    会出现CDaoException是因为在create或open时CDaoDatabase调用了AfxDaoInit出错
    不过还是不清楚为什么在dll里这样调用会出错
    debug错误信息是First-chance exception in dlltest.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
    这应该是编译器捕获了异常处理了,所以在我机子上它还是能正常运行。可是有些机器编译器捕获到了异常却没处理就导致程序出错了。
    哎,到底怎么改啊。。MSDN上有一篇Your application may fail with an "Access Violation" error message when you use ODBC or DAO in the InitInstance or DLLMain functions of a DLL的文章
    好像是说dll里创建了线程会出错啥的,不知道我出错的跟这是不是一样呢。