CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

关于指针问题。大家帮我看看,学习中。。。。

楼主hotstud(灰色吉它手)2005-06-02 22:34:26 在 Delphi / VCL组件开发及应用 提问

我今天学习使用DLL,有这样一个问题,大家帮我分析一下,是那儿的错。  
  结构是这样的,有一个接口单位(import.pas),主要做用是声明一个数据类型,还有引用DLL文件然后是DLL文件,中有一个函数,作用是将小写人民币转换大写的。然后在一个顶目的窗体中调用DLL中的函数。一切都正常,只是在最后窗体关闭时,有一个错误提示  
  如下:Project   rmb.exe   raised   exception   class   EInvalidPointer   with   message'Invalid   pointer   operation'.Process   stop......  
  我找不出来问题,大家帮我一下,以下是源文件:  
  //import.pas  
  unit   import;  
   
  interface  
  uses   ShareMem,Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls,   ComCtrls;  
  type  
          PRMB=^RMB;  
          RMB=record  
          yi:integer;  
          qw:integer;  
          bw:integer;  
          sw:integer;  
          wa:integer;  
          qian:integer;  
          bai:integer;  
          shi:integer;  
          ge:integer;  
          jiao:integer;  
          fen:integer;  
          resultstring:string;  
          end;  
  var   ChinaMoney:array   [0..9]   of   string=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');  
          ChinaUnit:array   [1..11]   of   string=('亿','千万','百万','十万','万','千','百','十','元','角','分');  
  function   ToChinaUnit(money:double;cmoney:PRMB):double;stdcall;  
  implementation  
  function   ToChinaUnit;external   'dlltormb.dll'   name   'ToChinaUnit';  
  end.  
   
   
   
  //dlltormb.dpr  
  library   dlltormb;  
  uses  
      ShareMem,SysUtils,Classes,import,math;  
   
  {$R   *.res}  
  function   ToChinaUnit(money:double;cmoney:PRMB):double;stdcall;  
  var   temp:int64;  
  begin  
            result:=money;  
            money:=roundto(money,-2);  
            temp:=strtoint(floattostr(money*100));  
            with   Cmoney^   do  
                  begin  
                          yi:=temp   div   10000000000;  
                          temp:=temp   mod   10000000000;  
                          qw:=temp   div   1000000000;  
                          temp:=temp   mod   1000000000;  
                          bw:=temp   div   100000000;  
                          temp:=temp   mod   100000000;  
                          sw:=temp   div   10000000;  
                          temp:=temp   mod   10000000;  
                          wa:=temp   div   1000000;  
                          temp:=temp   mod   1000000;  
                          qian:=temp   div   100000;  
                          temp:=temp   mod   100000;  
                          bai:=temp   div   10000;  
                          temp:=temp   mod   10000;  
                          shi:=temp   div   1000;  
                          temp:=temp   mod   1000;  
                          ge:=temp   div   100;  
                          temp:=temp   mod   100;  
                          jiao:=temp   div   10;  
                          fen:=temp   mod   10;  
                          resultstring:='';  
                          if   yi>0   then  
                                resultstring:=resultstring+ChinaMoney[yi]+ChinaUnit[1];  
                          if   qw>0   then  
                                resultstring:=resultstring+ChinaMoney[qw]+ChinaUnit[2];  
                          if   bw>0   then  
                                resultstring:=resultstring+ChinaMoney[bw]+ChinaUnit[3];  
                          if   sw>0   then  
                                resultstring:=resultstring+ChinaMoney[sw]+chinaUnit[4];  
                          if   wa>0   then  
                                resultstring:=resultstring+ChinaMoney[wa]+chinaUnit[5];  
                          if   qian>0   then  
                                resultstring:=resultstring+ChinaMoney[qian]+ChinaUnit[6];  
                          if   bai>0   then  
                                resultstring:=resultstring+ChinaMoney[bai]+ChinaUnit[7];  
                          if   shi>0   then  
                                resultstring:=resultstring+ChinaMoney[shi]+ChinaUnit[8];  
                          if   ge>0   then  
                                resultstring:=resultstring+ChinaMoney[ge]+ChinaUnit[9];  
                          if   jiao>0   then  
                                resultstring:=resultstring+ChinaMoney[jiao]+ChinaUnit[10];  
                          if   fen>0   then  
                                resultstring:=resultstring+ChinaMoney[fen]+ChinaUnit[11];  
                  end;  
  end;  
   
  exports  
        ToChinaUnit;  
   
  end.  
   
   
  //mainfrm.pas  
  unit   mainfrm;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls,math;  
   
  type  
      TForm1   =   class(TForm)  
          Label1:   TLabel;  
          Edit1:   TEdit;  
          Label2:   TLabel;  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
  var  
      Form1:   TForm1;  
   
  implementation  
  uses   import;  
  {$R   *.dfm}  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   money:double;  
          cmoney:RMB;  
  begin  
          money:=strtofloat(edit1.text);  
          money:=ToChinaUnit(money,@cmoney);  
          label2.Caption:=cmoney.resultstring;  
  end;  
   
  end.  
  问题点数:10、回复次数:3Top

1 楼merkey2002(小样的)回复于 2005-06-03 22:11:33 得分 0

我觉得这个函数写得不咋的Top

2 楼dinglj1760(阿拉丁)回复于 2005-06-04 01:11:20 得分 10

指针未初始化  
  New()  
  Dispose()Top

3 楼hotstud(灰色吉它手)回复于 2005-06-06 12:14:03 得分 0

为什么没有人回答。Top

相关问题

  • 指针啊指针。。。大家帮我看看。。。。。。。。
  • 指针如何学习??
  • 我学习指针时觉得好象指针没什么作用,谁能举个用指针的典型小例子
  • [求助!!!],帮我理解一下指向指针的指针,关于2级指针的问题??
  • 帮我解释一下,,,,指针变量。
  • 谁能帮我解释一下远指针和近指针的区别?
  • 高手来帮忙看看,关于函数指针的问题,非高手也学习学习吧,
  • 谁能帮我修改一下指针作为函数传递参数(我在自定义消息中用指针传值) ?我对指针不熟
  • 关于ifstream的问题,可能是文件指针?帮帮我。
  • 指针问题啊,帮帮我啊高手们?????????????

关键词

  • dll
  • tochinaunit
  • rmb
  • integer
  • 问题
  • import

得分解答快速导航

  • 帖主:hotstud
  • dinglj1760

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo