在线等高手帮忙 VB\VC转DELPHI
南飞 2003-10-09 03:59:54 我用DELPHI改写了一个VB的函数调用,但总是报地址错,请高手帮帮忙!急,我在线等啊
VC格式:
SCREADER_API BOOL WINAPI MF_CascSelect(long hPort,BYTE argSelectCode,BYTE* pSnr, BYTE* pSak);
SCREADER_API BOOL WINAPI MF_Select(long hPort,BYTE* pSnr, BYTE* pSak);
VB语法:
Public Declare Function MF_CascSelect Lib "SCReader.dll" (ByVal hPort As Long, ByVal argSelectCode As Byte, pSnr As Byte, pSize As Byte) As Long
Public Declare Function MF_Select Lib "SCReader.dll" (ByVal hPort As Long, pSnr As Byte, pSak As Byte) As Long
参数:
hPort [IN]读写器句柄,由SC_OpenReader返回得到。
argSelectCode [IN]选择码,93H为标准的选择码,95H为一级码,97H为二级码。
pSnr [IN]4字节卡号,指定要选择的卡的卡号。
pSak [OUT]1字节的响应信息,无特殊含义。
返回值:
非0值表示成功,0表示失败。
VB演示:
Dim bRetval As Long
Dim sak As Byte
bRetval = MF_Select(m_hPort, m_snr(0), sak)
If 0 <> bRetval Then
txtSAK.Text = ToHexString(sak)
Else
MsgBox "Anticoll Failed!"
End If
{******************以下我用DELPHI写的程序*****************************}
申明:
function MF_Select(hPort:integer;pSnr:array of byte;pSize:byte):integer;Stdcall;external 'SCReader.dll' name 'MF_Select';
procedure TForm1.Button6Click(Sender: TObject); //select
var
bRetval,i:integer;
str_tmp:string;
bt_tmp:byte;
begin
try
bRetval:=MF_Select(vpi_openport,arr_serialno,bt_tmp);//
except
end;
If bRetval<>0 Then
begin
str_tmp:=inttohex(bt_tmp,2);
memo1.Lines.Add('返回值:'+inttostr(bretval)+' 字节内容:'+str_tmp);
end
Else
begin
memo1.Lines.Add('MF_SELECT 出错!');
End;
end;