IC卡读卡后数据显示的问题:
在 delphi中调用C的动态链接库:
bool InitialDrv(HWND hWnd, int ComPort);
    void FreeDev();
bool ReadKa(  char   *SerialNo,    // IC卡序列号 必须预分配10个字节;
char   *CardNo,      //  IC卡帐号   必须预分配6个字节;
int    *nTradeCnt,   // 上次交易的计数
double *fKaResidual, // IC卡电子钱包余额
char   *SysCode  );  // 系统识别码  必须预分配10个字节;bool WriteKa(  char   *SerialNo,    // 写卡前读出的IC卡序列号;
int    nTradeCnt,    // 交易计数,余额的任何变动操作该值加 1
double fKaResidualchar  ); // IC卡电子钱包余额void LastErrMessage(char *lpErrMessage);重声明:
implementation
    function InitialDrv( hWnd : HWND ; ComPort : integer ) : boolean ;
                        stdcall ; external 'READ_CARD.DLL';
    procedure FreeDev(); stdcall ; external 'READ_CARD.DLL';
    procedure AutoRead( var act : boolean ) ;
                        stdcall ; external 'READ_CARD.DLL';
    function ReadKa( var SerialNo : Pchar ;
                     var CardNo : Pchar ;
                     var nTradeCnt : integer ;
                     var fKaResidual : double ;
                     var SysCode : Pchar) : boolean ;
                     stdcall ; external 'READ_CARD.DLL';
    function WriteKa( var SerialNo : Pchar ;
                      var nTradeCnt : integer ;
                      var fKaResidual : double) : boolean ;
                      stdcall ; external 'READ_CARD.DLL';
    procedure LastErrMessage( var lpErrMessage : Pchar) ;
                        stdcall ; external 'READ_CARD.DLL';调用过程:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  s: String;
  SerialNo, CardNo, SysCode : PChar;
  nTradeCnt : integer;
  fKaResidual : double;
begin
  GetMem(SerialNo,15);
  GetMem(CardNo,11);
  GetMem(SysCode,15);
  if ReadKa(SerialNo,
            CardNo,
            nTradeCnt,
            fKaResidual,
            SysCode) = True then
    ShowMessage('Success')
  else
    ShowMessage('False');  s := StrPas(SerialNo);
  ShowMessage(s);
  FreeMem(SerialNo);
  FreeMem(CardNo);
  FreeMem(SysCode);
end;运行至s := StrPas(SerialNo);语句时报错,系统异常
请高手帮帮忙,看看问题在哪里,谢谢啦

解决方案 »

  1.   

    s:=serialNO;
    将pchar类型的值可以直接给string类型的值
      

  2.   

    重声明:
    implementation
        function InitialDrv( hWnd : HWND ; ComPort : integer ) : boolean ;
                            stdcall ; external 'READ_CARD.DLL';
        procedure FreeDev(); stdcall ; external 'READ_CARD.DLL';
        procedure AutoRead( var act : boolean ) ;
                            stdcall ; external 'READ_CARD.DLL';
        function ReadKa( var SerialNo : Pchar ;
                         var CardNo : Pchar ;
                         var nTradeCnt : integer ;
                         var fKaResidual : double ;
                         var SysCode : Pchar) : boolean ;
                         stdcall ; external 'READ_CARD.DLL';
        function WriteKa( var SerialNo : Pchar ;
                          var nTradeCnt : integer ;
                          var fKaResidual : double) : boolean ;
                          stdcall ; external 'READ_CARD.DLL';
        procedure LastErrMessage( var lpErrMessage : Pchar) ;
                            stdcall ; external 'READ_CARD.DLL';
    这个声明有问题
      procedure LastErrMessage( ////Var//不需要这个VAR lpErrMessage : Pchar) ;
                            stdcall ; external 'READ_CARD.DLL';
      

  3.   

    你所有CHAR *的都需要PCHAR,而不是VAR PCHAR;