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);语句时报错,系统异常
请高手帮帮忙,看看问题在哪里,谢谢啦
在 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);语句时报错,系统异常
请高手帮帮忙,看看问题在哪里,谢谢啦
将pchar类型的值可以直接给string类型的值
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';