在线等高手帮忙 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;
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
南飞 2003-10-10
  • 打赏
  • 举报
回复
好啦,问题已经解决,多谢大家的关照,放分了!
其实,是它的DLL库的要求特别严格,它要求:
输入用 var申明;
输出用 out申明;

"另外对SCREADER_API BOOL WINAPI 这是什么东西我不太明白,"其实一开始就注明了这是VC调用函数的方式,不是吗?
crossbow 2003-10-09
  • 打赏
  • 举报
回复
应该没有问题了。
crossbow 2003-10-09
  • 打赏
  • 举报
回复
function MF_Select(
hPort:LongInt;
pSnr, pSize: Pointer
): Integer;Stdcall;external 'SCReader.dll' name 'MF_Select';
微雪缤纷 2003-10-09
  • 打赏
  • 举报
回复
function MF_Select(hPort:integer;pSnr:PChar;pSize:PChar):integer;Stdcall;external 'SCReader.dll' name 'MF_Select';
另外对SCREADER_API BOOL WINAPI 这是什么东西我不太明白,反正如果'SCReader.dll是拿VC写的话这样调用应该没问题的。
注意:pSnr:PChar;和pSize:PChar;这两个参数对应的指针的数据格式,比如原来要求10byte的内容,那传入的指针对应的也要10byte的内容。
cow8063 2003-10-09
  • 打赏
  • 举报
回复
老兄,我看你这个是API调用吧,看来看去不明白,看看其它高手
南飞 2003-10-09
  • 打赏
  • 举报
回复
up
南飞 2003-10-09
  • 打赏
  • 举报
回复
自己顶
南飞 2003-10-09
  • 打赏
  • 举报
回复
这是为什么?

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧