Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1257934
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-02-03 09:56:32



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

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

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天后才报错呢

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

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

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

那我就不知了,   帮顶吧



--------------------------
新闻:阿里巴巴宣布今年将新招聘5000人
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~