首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

为什么读卡会出错,请

2012-03-02 
为什么读卡会出错,请高手指点!dll说明如下:RDATA:读卡数据输出缓冲区(用于存放读卡成功后的返回数据)字符

为什么读卡会出错,请高手指点!
dll说明如下:RDATA:   读卡数据输出缓冲区(用于存放读卡成功后的返回数据)
字符串,长度不少于300字节.
         
读卡成功返回格式:  
          RDATA   =   "磁道1数据 "             -------   返回磁道1数据(此时   TRACK   为1)
          RDATA   =   "磁道2数据 "                           -------   返回磁道2数据(此时   TRACK   为2)                    
          RDATA   =   "磁道3数据 "                           -------   返回磁道3数据(此时   TRACK   为3)
          RDATA   =   "磁道2数据a磁道1数据 "       -------   返回磁道2数据和磁道1数据(此时   TRACK   为4)
          RDATA   =   "磁道2数据a磁道3数据 "       -------   返回磁道2数据和磁道3数据(此时   TRACK   为5)
         
      读卡错误:   Rcard函数返回值为-4
           
              其中:   小写字符a为磁道2与磁道1(或磁道2与磁道3)的数据的分隔符
                          1道数据可为字母或数字,最多76个
                          2道数据只可为数字,最多37个  
                          3数据只可为数字,最多104个
                         
              如:
                          Rcard( "1,9600,N,8,1 ",RDATA,1)
                                              --------   表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
                                                                          无校验的方式从第1磁轨中读取数据(存放在RDATA中)
                                                                         
                          Rcard( "1,9600,N,8,1 ",RDATA,2)
                                              --------   表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
                                                                          无校验的方式从第2磁轨中读取数据(存放在RDATA中)          
                                                                                         


                          Rcard( "1,9600,N,8,1 ",RDATA,3)
                                              --------   表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
                                                                          无校验的方式从第3磁轨中读取数据(存放在RDATA中)  
                                                                         
                          Rcard( "1,9600,N,8,1 ",RDATA,4)
                                              --------   表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
                                                                          无校验的方式从第2磁轨和第1磁轨中读取数据
                                                                          (存放在RDATA中,中间以小写字符a作间隔)        
                                                                         
                          Rcard( "1,9600,N,8,1 ",RDATA,5)
                                              --------   表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
                                                                          无校验的方式从第2磁轨和第3磁轨中读取数据
                                                                          (存放在RDATA中,中间以小写字符a作间隔)      


我在delphi用的时候是这样的:  
implementation
  function   Rcard(sSET:pchar;RDATA:pchar;TRACK:integer):integer;stdcall;external 'KeyCard.dll '


var
    mydata:pchar;
    myflg:integer;
begin          
            try
                myflg:=Rcard( '1,9600,N,8,1 ',mydata,2);
            except
                showmessage(inttostr(myflg));


            end;
            showmessage(mydata);
end;
可总是出错,读不出东西来,用VC写的读卡程序是这样的:UpdateData(TRUE);
char   set[25],rdata[250];
itoa(m_iPort+1,set,10);
strcat(set, ",9600,N,8,1 ");
Rcard( "1,9600,N,8,1 ",rdata,2);
AfxMessageBox(rdata);
这样是可以读出数据的,不知道我在delphi   里为什么读不出来!


[解决办法]
帅哥,你的mydata没分配内存啊!

热点排行