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

焦头烂额一个上午还是搞不定,跪地相求大家,朋友帮忙啊。。。 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中分配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ViceDinoSpecCtrlDlg.cpp

GetSystemMenu https://baike.baidu.com/item/GetSystemMenu/6373330?fraladdin CreateClassEnumerator 方法为指定的设备类别创建枚举器。成功返回S_OK https://docs.microsoft.com/en-us/previous-versions/ms784969(v%3Dvs.85) IEnumMoniker:IUnknown 此接口用于枚举名字…

单片机显示原理

▌一.接口LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外&…

Overview of ISA and TMG Networking and ISA Networking Case Study (Part 2)

老方说:此篇文章摘自ISASERVER.ORG网站,出自Thomas Shinder达人之手。严重建议ISA爱好者看看。Published: Dec 16, 2008 Updated: Jan 21, 2009 Author: Thomas Shinder In our last article . ISA and TMG firewall networking, I talked about how I…

WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机

版本:win10系统  virtualbox:5.1.26  vagrant :1.9.7  centos 7.0  xshell/git 首先下载好对应版本的软件 配置vagrant和virtualbox 一.把虚拟机加载到box容器中 vagrant box add CentOs7.0 D:\soft\Vagrantfile\package.boxCentOs7.0 是给虚拟机起的名字 D:\soft\Vagr…

CPtrArray

CPtrArray https://baike.baidu.com/item/CPtrArray/5774676?fraladdin CString Format https://blog.csdn.net/linj_m/article/details/26448269 strtol, _tcstol, wcstol:字符串转 32 位长整数 (long), 支持 2 ~ 36 进位制 合法的情况下十六进制转换为十进制&a…

Linux 驱动开发 | 驱动世界里的宏伟建筑

哈喽,我是老吴。是否每一个上进的人都会觉得自己还可以再努力一点?事情到了最后,只要没达成目的,总能把失败的原因归为 "没有再努力一点"。但是,对努力的最大错误认知就是:时间越长,过…

【乡音】海安话四级考试

海安话四级考试海安话国家四级考试试卷-------------启用前★绝密------------(中国标准话语言研究中心命题) 准考证号___________ 姓名_____________ 座位号___________ 一、选择题(共五题&#xf…

AllocateAndInitializeSid function

AllocateAndInitializeSid function AllocateAndInitializeSid函数使用最多八个子权限分配和初始化安全标识符(SID)。 https://docs.microsoft.com/en-us/windows/desktop/api/securitybaseapi/nf-securitybaseapi-allocateandinitializesid

POJ1179 Polygon 【例题精讲】

题意:多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“”或“*”。所有边依次用整数从1到n编号游戏第1步,将一条边删除随后n-1步按以下方式操作(1)选择一条边…

WinDBG 技巧:如何生成Dump 文件(.dump 命令)

程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:1) 打开WinDBG并将之Attach 到crash的程序进程2&#…

学模拟电路的神器everycircuit

之前转的几篇文章,大家对里面的软件非常感兴趣,所以就给你们找来了,这是一个仿真软件。▌官网https://everycircuit.com/▌视频介绍,视频是老外的比如,你想仿真一个555定时器▌手机上也可以用,可以在我刚才…

我也想再上个学

关注我的同学应该知道,我不止在一次告诉大家读书是可以让大家能有更多的机会的,有时候自己也想什么时候再深造一下,等楠哥不那么需要我了,我也不用那么努力赚钱了,再去读读书,在学校里面打打篮球&#xff0…

timeSetEvent、回调函数、CCriticalSection

timeSetEvent https://baike.baidu.com/item/timeSetEvent/6645204 回调函数 https://blog.csdn.net/bzhxuexi/article/details/11769151 https://blog.csdn.net/bzhxuexi/article/details/11767979 https://blog.csdn.net/bzhxuexi/article/details/19831667 CCriticalSecti…

使用GenerateDriverDiskISO无需软驱安装WINDOWS操作系统

转自:[url]http://bbs.wuyou.com/viewthread.php?tid121630&extra&page1[/url]附件中有详细文章内容及GenerateDriverDiskISO.RAR下载作者: lookskyoo 时间: 2008-3-5 11:19 标题: [chenhall找到最好的解决方案]自认为最好的…

TQ210 —— s5pv210 Linux内核结构

Linux内核结构 1、内核的子系统 (1) 系统调用接口SCI(System Call Interface):SCI层为用户空间提供了一套标准的系统调用函数来访问Linux内核,搭起了用户空间到内核空间的桥梁。 (2) 进程管理PM(Process …

ESP32搞的NES游戏掌机

本文转自立创开源硬件平台作者:micespring原文链接:https://oshwhub.com/micespring/esp32-nesemu▌简介一个基于ESP32制作的开源游戏掌机,可以运行标准的NES(日版为FC)游戏,支持单声道音频。让你随时回味儿…

Matplotlib从文件绘图时Y轴坐标不正确

问题描述: 从文件中读取X坐标和Y坐标,绘制折线图,代码和结果如下: import matplotlib.pyplot as plt import matplotlib.animation as animation from matplotlib import stylestyle.use(dark_background)fig plt.figure()graph_…

主网络程序函数

CList https://baike.baidu.com/item/CList GetCurrentDirectory 是一个系统参数,在一个缓冲区中装载当前目录,Long,装载到lpBuffer的字节数。如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度&a…

TQ210 —— 嵌入式Linux根文件系统的设计与实现

嵌入式Linux根文件系统的设计与实现 1、Linux文件系统基本概念 文件系统类型:FAT32、NTFS、EXT2、 EXT3、 JFFS2、 YAFFS2、 NFS Linux根文件系统目录结构: (1) /bin 目录 该目录下存放所有用户(包括系统管理员和一般用户)都…

全球最囧的爱情测试.....

据说这是全球最准的爱情测试:http://love.xf001.com/?uid224632 。。。。。。。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。…