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

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-05-12 16:04:35



自己写了个DLL,用delphi调用我自己DELPHI写的DLL,运行结果可以出来,但运行完毕后会提示内存访问错误。我第二次调用的时候就直接提示内存访问错误,无法运行。在程序中我使用了Record集合作为返回记录  
  uses  
      sharemem,  
      。。。。。。  
  var    
      。。。。。。  
    type  
          Tps   =   Record  
                    sno:   integer;  
                    sname:string;  
                    skt:string;  
      End;  
      Tp=array   of   Tps;  
   
  我的函数是  
  function   sel(s:integer,var   PResult:Tp):integer;   export;   stdcall;  
  begin  
      s:=0;  
      ......  
      if   (满足条件)   then  
      begin  
          s:=s+1;  
          setlength(pResult,s);  
          PResult[s-1].sno:=某数据;  
          PResult[s-1].sname:=某数据;  
          PResult[s-1].stk:=某数据;  
      end;  
  end;  
   
  请兄弟们帮忙看看哪里有问题啊!  
 

把string类型换成shortstring

可能是其他代码的原因,用注释的方法或条件编绎逐块排除

我试了一下,就是换成PCHAR也还是不行的了,应该就是这段代码出的问题,因为没加这段代码前都是好好的,加了就有问题,我运行完毕后执行结果是有的,但会报内存错误。我第二次运行的时候居然连运行都不能运行就直接出错了。

1.没有string返回值,就不要用sharemem(sharemem有时会有问题,我也碰到过)  
  2.改string为string[250]   //如果数据长度不超过250的话  
    或改为char[1000];  
    不要改为pchar,因为它要申请内存  
   
 

用low   high函数来访问记录数组

我一般在访问Dll时都用pchar操作,只是多写几个参数罢了,可以避免很多问题的。

Tp=array   of   Tps;  
      PTp   =   ^TP;  
   
  function   sel(s:integer,var   PResult:PTp):integer;   export;   stdcall;  
   
  Tp改用指针



--------------------------
新闻:微软触控平台Surface SP1发布
网站导航: 博客园首页  新闻  .NET频道  社区  博问  闪存  找找看
阅读(586) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~