/*参数
  COMID   串口号
  CardID  IC卡号;
  CardGas  卡内剩余气量 ;
  IcNum  为发卡次数
  IcMark  为卡片备注
  passbuf  为加密信息,128位
*/int __stdcall Bank_Read(int COMID,char * cardid,int *cardgas,int * icnum,int *ic,char *passBuff);
int __stdcall Bank_Write(int COMID,char * cardid,int cardgas,char * passbuf);
**********以上是厂家给的C代码,动态库函数的调用方法**********//以下 是我尝试写的Delphi7调用的代码。function HYYTReadCard(COMID: Integer; CardID: PAnsiChar; var CardGas: Integer; var IcNum, IcMark: Integer; password: PAnsiChar): Integer; stdcall;
function HYYTWriteCard(COMID: Integer; CardID: PAnsiChar; var CardGas: Integer; password: PAnsiChar): Integer; stdcall;
function HYYTReadCard; external 'HYYT_Card.dll' name 'Bank_Read';
function HYYTWriteCard; external 'HYYT_Card.dll' name 'Bank_Write';procedure TYzqtMainForm.btn2Click(Sender: TObject);       //---读卡
var
  gStat1:integer;
  COMID: integer;          //串口号,1送0
  CardID: array[1..10] of char;   // 卡号
  CardGas: integer;          // 卡内余量
  IcNum: integer;          //发卡次数
  IcMark: integer;          //备注信息
  password: array[1..128] of char;  //卡密
begin
        gStat1:=HYYTReadCard(COMID,@CardID,CardGas,IcNum,IcMark,@password);
        if gStat1=0 then
        begin
          showmessage('读卡成功!');
          //showmessage(inttostr(ICErroy)+':'+trim(ErroyMsg))    ;
          showmessage('@串口号comm:@'+inttostr(COMID)+'@');
          showmessage('@用户卡编号@'+CardID+'@');
          showmessage('@卡内余量@'+inttostr(CardGas)+'@@');
          showmessage('@发卡次数@'+inttostr(IcNum)+'@@');
          showmessage('@发卡备注@'+inttostr(IcMark)+'@@');
          edt1.Text:= trim(password);
        end;       
end;
出现的问题是,除了 password: array[1..128] of char;  //卡密   这一项获取了数据,其他字段都没数据,都为0或者为空。CardID这个参数的用法应该是和卡密的一样,但是也没有数据。  CardGas, IcNum,IcMark的定义是不是有问题。不太清楚指针的准确定义。希望得到指教。如何翻译一下厂家的两行代码。

解决方案 »

  1.   

    function HYYTReadCard(COMID: Integer; CardID: PAnsiChar; var CardGas, IcNum, IcMark: Integer; password: PAnsiChar): Integer; stdcall; external 'HYYT_Card.dll' name 'Bank_Read';
    function HYYTWriteCard(COMID: Integer; CardID: PAnsiChar; CardGas: Integer; password: PAnsiChar): Integer; stdcall; external 'HYYT_Card.dll' name 'Bank_Write';
      

  2.   


    procedure TYzqtMainForm.btn2Click(Sender: TObject);       //---读卡
    var
      gStat1:integer;
      COMID: integer;          //串口号,1送0
      CardID: array[0..9] of char;   // 卡号
      CardGas: integer;          // 卡内余量
      IcNum: integer;          //发卡次数
      IcMark: integer;          //备注信息
      password: array[0..127] of char;  //卡密
    begin
            gStat1:=HYYTReadCard(COMID,CardID,CardGas,IcNum,IcMark,password);
            if gStat1=0 then
            begin
              showmessage('读卡成功!');
              //showmessage(inttostr(ICErroy)+':'+trim(ErroyMsg))    ;
              showmessage('@串口号comm:@'+inttostr(COMID)+'@');
              showmessage('@用户卡编号@'+CardID+'@');
              showmessage('@卡内余量@'+inttostr(CardGas)+'@@');
              showmessage('@发卡次数@'+inttostr(IcNum)+'@@');
              showmessage('@发卡备注@'+inttostr(IcMark)+'@@');
              edt1.Text:= trim(password);
            end;       
    end;