焦头烂额一个上午还是搞不定,跪地相求大家,朋友帮忙啊。。。

焦头烂额一个上午还是搞不定,跪地相求大家,朋友帮忙啊。。。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061218121845242.html
library   MYDLL;  
   
  uses  
      sharemem,  
      SysUtils,  
      StdCtrls;  
  var  
      fjmain   :   TADODataSet;  
   
      type  
          Tps   =   Record  
                    sno:   integer;    
                    fjcode:pchar;  
                    fjname:pchar;//  
      End;  
      Tp=array   of   Tps;  
   
  {$R   *.RES}  
   
  function   Select(transmode:pchar;var   PResult:Tp):integer;   export;   stdcall;  
  var  
      fjcode,t1,t2:pchar   ;  
        totalnum:integer;  
  begin  
      fjmain:=   TADODataSet.Create(nil);  
      ADO配置过程......(OK的)  
      fjmain.Connection   :=   ADOConnection;  
      try  
          fjmain.Close;  
          fjmain.CommandText:=   'Select   *   From   fjmain   order   by   fjid';  
          fjmain.Open;  
          t1:=pchar(fjMain.fieldbyname('fjcode').asstring);      
          t2:=pchar(fjMain.fieldbyname('fjname').asstring);            
          while   not   fjmain.eof   do  
          begin  
              if   (满足条件)   then  
              begin  
                  totalnum:=totalnum+1;  
                  setlength(PResult,totalNum);  
                  PResult[totalNum-1].sno:=totalnum;  
                  PResult[totalNum-1].fjcode:=t1;  
                  PResult[totalNum-1].fjname:=t2;  
              end;  
              fjmain.next;  
          end;  
          Result   :=   totalnum;  
      finally  
          fjmain.Free;  
          CoUnInitialize;  
      end;    
  end;  
   
  exports  
      Select;  
   
  begin  
   
  end.  
   
  以上是我的代码,现在的问题是  
  第一:我在fjmain表循环的时候,有很多满足条件的记录,我看了结果仅仅最后一条记录中的fjcode,fjname字符串是正确的,其他的都是乱78糟的字符,或者是字符的前几个字母后面的字母是乱码,为什么呢?  
  第二:当我连续两次调用该DLL的时候,会出现内存错误,难道我什么地方没有释放字符串PCHAR变量,就是t1,t2变量么?  
   
  这个问题我已经搞了一个上午了,反复的换pchar,string来试,结果还是有内存问题,大家帮我看看程序的什么地方有问题呢?

totalnum的初始数值是多少

应该不是这个问题,初始值是0   啊

array   of   是Delphi特有的开放数组  
  作为DLL的接口,恐怕有问题的

直接使用fieldbyname().value试试?

totalnum的初始数值?

初始值我说了是0啊,我前面有这样语句的,我的问题还是在于STRING使用上的问题,因为我一旦去掉                 setlength(PResult,totalNum);  
                  PResult[totalNum-1].sno:=totalnum;  
                  PResult[totalNum-1].fjcode:=t1;  
                  PResult[totalNum-1].fjname:=t2;这几句,怎么运行都不会出问题的。

1、totalnum的初始值?  
  2、t1,t2是PChar类型,Pchar是指针,不能用来保存数据,当fjmain.Next后,应该指向了无效地址空间。  
  3、array   of   是Delphi特有的开放数组,作为DLL的接口,肯定有问题的。  
  4、在循环中反复使用setlength(PResult,totalNum);分配内存空间,可能造成前面已经赋值的记录数据丢失,造成乱码

谢谢以上各位兄弟们的关心和回答,尽管我问题还没有完全处理掉,但给我了很好的思路,先结帖,顺便关于下面的这个问题,问下大哥:  
  3、array   of   是Delphi特有的开放数组,作为DLL的接口,肯定有问题的。  
  (我ARRAY   OF只在函数中单独定义单独使用,不作为DLL程序和外界程序的接口,可以使用么?)  
 

我ARRAY   OF只在函数中单独定义单独使用,不作为DLL程序和外界程序的接口,可以使用么?  
  ===================================================================================  
  那应该没问题的,另外需要指出的是,输出记录地址最好由程序调用Dll函数前分配,不要在Dll中分配

转载于:https://www.cnblogs.com/delphi2007/archive/2009/02/19/1394144.html

<!DOCTYPE html> <html> <head> <title>蜡笔小新</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { font-family: Arial, sans-serif; background-color: #f0e6d2; } h1 { text-align: center; font-size: 3em; margin-top: 50px; color: #d34141; text-shadow: 2px 2px #f8e9da; } .container { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; margin-top: 50px; } .card { background-color: #f8e9da; margin: 20px; width: 300px; height: 400px; padding: 20px; box-shadow: 2px 2px 5px #d34141; } .card img { width: 100%; height: 250px; object-fit: cover; margin-bottom: 20px; } .card h2 { font-size: 1.5em; color: #d34141; margin-bottom: 10px; text-align: center; } .card p { font-size: 1.2em; line-height: 1.5; margin-bottom: 20px; text-align: justify; } .card a { display: block; background-color: #d34141; color: #f8e9da; padding: 10px; text-align: center; text-decoration: none; border-radius: 5px; margin-top: 20px; transition: background-color 0.3s ease-in-out; } .card a:hover { background-color: #f8e9da; color: #d34141; box-shadow: 2px 2px 5px #d34141; } </style> </head> <body> <h1>蜡笔小新</h1> <div class="container"> <div class="card"> <img src="https://i.imgur.com/7uPjK8n.jpg" alt="小新"> <h2>野原新之助</h2> <p>野原新之助,日本漫画家臼井儿童漫画《蜡笔小新》的主角,5岁小学生。他的最大特点就是调皮捣蛋,总是在幼稚园和家里惹出一堆烦恼。</p> <a href="https://zh.wikipedia.org/wiki/%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0" target="_blank">了解更多</a> </div> <div class="card"> <img src="https://i.imgur.com/6r3bq3T.jpg" alt="小白"> <h2>小白</h2> <p>小白是野原家的宠物狗,是小新的好朋友。虽然只是一只小狗,但它经常帮助小新解决问题。</p> <a href="https://zh.wikipedia.org/wiki/%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0" target="_blank">了解更多</a> </div> <div class="card"> <img src="https://i.imgur.com/Un0nq1q.jpg" alt="妈妈"> <h2>野原美伢</h2> <p>野原美伢是小新的母亲,是一名家庭主妇。她非常疼爱小新,但也常常被他搞得焦头烂额。</p> <a href="https://zh.wikipedia.org/wiki/%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0" target="_blank">了解更多</a> </div> <div class="card"> <img src="https://i.imgur.com/2yW7h8P.jpg" alt="爸爸"> <h2>野原广志</h2> <p>野原广志是小新的父亲,是一名普通上班族。他有时会和小新一起玩耍,但更多的时候是在家里挣钱养家。</p> <a href="https://zh.wikipedia.org/wiki/%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0" target="_blank">了解更多</a> </div> </div> </body> </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值