我在某个DLL中写了个函数:Init(CDatabase* pdb,...)做初始化工作(主要读取一些数据)主要用法是:
CRecordset rs(pdb); //RELEASE版本出错的地方!,说内存只读什么的
CString strsql="select .... from ......";
rs.Open(...);
....
我在EXE工程中,要调用刚才的DLL中的Init(CDatabase* pdb,...)我调用的时候是声明一个CDatabase m_db;
然后做好数据源连接,Init(&m_db,...);我之所以这样说(DLL和EXE工程)是因为,我如果在一个EXE工程里的话,不管RELEASE版本和DEBUG版本都没有问题!!!最后一句话说再说一遍(我觉得我说的有点问题,怕你们误解)我尝试了在同一个工程里(EXE工程),做完上面所有的步骤。包括数据源连接和CRecordset构建和访问数据库,总之,我在一个EXE工程里面用同样步骤的做法,RELEASE和DEBUG版本都没有问题。高手帮忙解决啊!
谢了!

解决方案 »

  1.   

    Release和Debug一般只是调试信息的差别。我也碰见过一次,后来发现是我用GlobalAlloc分配的内存我用delete释放的,这样Debug没问题但Release不行,后来改成GlobalFree就行了。
    另外:你应该调试一下Release版的DLL,单步跟踪一下。
      

  2.   

    你好像漏了打开数据源,如
    CDatabase db;
    db.Open("MyStudent");
      

  3.   

    数据源是打开了的!
    shinesi(DaBaiCai) :RELEASE版的怎么调试?
      

  4.   

    你看看是不是数据初始化的问题,在debug版本中,你没有初始化的数据都会自动初始化为0而release版本中则不会!
      

  5.   

    我碰到过两者必须都是Debug或都是Release
      

  6.   

    出错的代码在DLL中的CRecordset rs(pdb);这一行
    ??
    两者都是RELEASE也不行!
      

  7.   

    Release调试设置:project->setting->C/C++->General->Debug Info->Program Database for Editing and Continue
      

  8.   

    wuxfBrave() :谢了,刚才试了一下(第一次试错了,忙中出错,不好意思:()。是可以了,
    两个都是RELEASE版的时候能运行。但是为什么呢??
    shinesi(DaBaiCai) :好的,我试试找找问题。
      

  9.   

    我用shinesi(DaBaiCai) 说的方法调试了一下:
    运行到DLL中的CRecordset rs(pdb);时报错:
    这是DEBUG窗口出现的信息(底部的窗口):
    First-chance exception in test.exe (MFC42.DLL): 0xC0000005: Access Violation.
    并弹出对话框说:
    Unhandled exception in test.exe(MFC42.DLL):Oxc000000t:Access Villation.不晓得为什么?