在执行m_pRecordset->Open(bstrSQL,
//_variant_t((IDispatch *)m_pConnection,true),
m_pConnection.GetInterfacePtr(),
adOpenStatic,
adLockOptimistic,
adCmdText);
应用程序,提示内存出错。
跟踪后的结果是:
    Unhandled exception in HnRadio.exe (MSVCRT.DLL):0xc00000fd :stack overflow请问各位大虾,是怎么回事??

解决方案 »

  1.   

    adOpenStatic换成adOpenKeyset试试,不行的话再试试下面代码去捕捉异常
    try {
        m_pRecordset->Open(bstrSQL,
        //_variant_t((IDispatch *)m_pConnection,true),
        m_pConnection.GetInterfacePtr(),
        adOpenStatic,
        adLockOptimistic,
        adCmdText);
    } catch (_com_error err) {
        AfxMessageBox((LPCTSTR)err.Description());
    }
      

  2.   

    还有两个要确认(1)同一个pRecordset对象不能连续Open两次,第二次Open之前要确认先Close,然后再Open (2)Open之前m_pRecordset.CreateInstance(__uuidof(Recordset));不要忘记,呵呵,这不太可能的。
      

  3.   

    violin712(violin712)   所的的问题,我都做好了。但是不是这个问题,我将 有关m_pRecordset 操作放的窗口函数里。就没有出现这个问题,有人跟我解释说 ADO 是COM 的一部分。所以放到窗口函数里处理更安全
      

  4.   

    你这是堆栈溢出错误我以前对多个类型的对象聚合成统一操作的时候,曾经将某个成员变量的同名函数忘写了成员变量名,结果出现了无限递归->堆栈溢出堆栈溢出通常是无限分配临时变量造成的(可能是你失误或者无意)你可以使用单步跟踪+分块搜索(整体到局部的分块调试)的方式找到问题所在.
    可能会是你的代码问题,也可能会是你对数据库接口的工作过程步了解,导致了数据库接口BUG的爆发
      

  5.   

    堆栈不够了,尽量不要要数组,将数组改为堆空间
    如:
    原先:int a[1000];
    改为:
    int *a=new int[1000];注意用后删掉,释放存储
      

  6.   

    :将 有关m_pRecordset 操作放的窗口函数里。就没有出现这个问题
    那你现在操作放在哪里?如果是放在线程里,线程开始处要初始化com库:CoInitialize();
      

  7.   

    写一个窗口函数,发送一个自定义 消息过去,在这个函数里调用关于pRecordset的处理