有个程序 运行大概五天左右的时间 
就报Access violation at address 00D24081 in module 'borlndmm.dll'. Write of address 033F00E8
数据库查询是用dll写的
访问数据库时是用的同一个连接
也就是说会出现多个线程同时依靠这个连接进行查询数据 不知道是不是这个原因导致以上错误 
有没有什么解决的办法

解决方案 »

  1.   

    旧题新帖? dll 入口定义要帖出来, 入口函数体也要(执行部分就没什么用)还有那段引起 access violation 的代码是哪句数据库连接可以由 dll 里面去建立的, 在 dll 间送对像总之有点不好把握
      

  2.   

    function TOpDataBase.OpenSql(const SqlStr: string): Boolean;
    begin
       Result := QueryDB_Ado(FDBHandle, PChar(SqlStr), FAdoQuery, FErrStr);
       if not Result then
        SetConnected(False);  
    end;
    调用以上函数时报错 access violation dll定义:Function QueryDB_Ado(    P_Handle   :Integer;
                             P_SQLStr   :PChar;
                         Var P_AdoQuery1:TAdoQuery;
                             P_ErrScript:PChar):Boolean; stdcall; external 'DBAccessDll.dll';
    至于dll内部代码是什么 不清楚 
    不明白的是为什么运行5,6天后才报错呢
      

  3.   

    主要矛盾在这两个参数var P_AdoQuery1 :TAdoQuery; // 这个倒不是问题, 不标准
    P_ErrScript:PChar           // 这个嗯,怎么说FErrStr 你的定义是什么? Pchar?
    如果是 Pchar 那你有没分配内存?应该分配多少内存?dll 作得不好哈, 那你只要分配个几K让他够了估计这个 dll 调用次数很少, 要不然, 100 次以内应该就会出错
      

  4.   

    FErrStr 是一个查询数据库报错时返回的信息啊 
    它的定义是
        FErrStr: array[0..255] of Char;
    一个数组 不用分配内存吧  
      

  5.   

    如果查询正确的话 这个FErrStr  是用不到的 仅仅是用来存放错误信息