我用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;
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;
解决方案 »
- DeleteVolumeMountPoin怎么使用?
- 有没有人还有delphi5?我看一个原代码是d5的
- 紧急求助!!!!!Delphi编程问题!!!!!!(要不会出人命的)
- 求救,关于dataset类型数据引用的问题。
- 请各位网络编程高手帮忙,关于ServerSocket判断客户端异常断开连接的问题?急急...
- 把汉字转为十六进制代码!(用0和1表示)
- 我是个新手,我想问问delphi都有什么好处!!??????
- 类型转换
- dbgrideh 增加一空行
- 我想实现一个功能:当点击某个按钮时,一个groupbox从左边出现,要带有动画效果
- --- 为什么这段代码会阻止windows关机?
- 找点事做或寻求合作
另外对SCREADER_API BOOL WINAPI 这是什么东西我不太明白,反正如果'SCReader.dll是拿VC写的话这样调用应该没问题的。
注意:pSnr:PChar;和pSize:PChar;这两个参数对应的指针的数据格式,比如原来要求10byte的内容,那传入的指针对应的也要10byte的内容。
hPort:LongInt;
pSnr, pSize: Pointer
): Integer;Stdcall;external 'SCReader.dll' name 'MF_Select';
其实,是它的DLL库的要求特别严格,它要求:
输入用 var申明;
输出用 out申明;"另外对SCREADER_API BOOL WINAPI 这是什么东西我不太明白,"其实一开始就注明了这是VC调用函数的方式,不是吗?