帮忙调用外部函数

yaiger 2012-10-30 05:09:08
外部函数说明:
int dc_card(int icdev,unsigned char _Mode,unsigned long *_Snr);

参 数:icdev:通讯设备标识符
_Mode:寻卡模式mode_card
_Snr:返回的卡序列号

返 回:成功则返回 0

例:int st;

unsigned long snr;

st=dc_card(icdev,0,&snr);

问题:&snr是什么含义?在PB中如何实现呢?

我在PB的定义
Function Long dc_card(long icdev, string Mode, ref unsignedlong Snr) LIBRARY "dcrf32.dll"

调用
Long ll_dev
Long ll_result
unsignedlong Snr

ll_result = dc_card(180, '0', ref Snr)

这个时候ll_result返回的值>0, 调用不成功。
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangbylove 2013-09-03
  • 打赏
  • 举报
回复
留着以后学习用
路人甲cw 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

不知道楼上有没有注意到
st=dc_card(icdev,0,&snr);

问题:&snr是什么含义?在PB中如何实现呢?

现在不是定义外部函数的问题,而是调用返回值>0, 估计就是这个&snr的问题
所以想了解&snr表示什么意思,在PB里面如何实现
[/Quote]
在C/C++中"&"是取址符或引用说明符,在这里是取变量地址的意思,而在PB中如果要实现向DLL传变量地址,则需要在外部函数的声明中在变量前加"ref"说明符。所以这个调用失败应该出现在你将导出函数中"unsigned char _Mode"参数对应为PB的"string Mode"声明造成的,因为这时"unsigned char _Mode"接收到的会是"string mode"复本的地址,而不是你传的'0',而且导出函数也不会将_Mode与'0'比较应该是与数值0比值才合理一些。
路人甲cw 2012-10-31
  • 打赏
  • 举报
回复
声明(PB9-):
Function Long dc_card(long icdev, uint Mode, ref ulong Snr) LIBRARY "dcrf32.dll"
或(PB10+):
Function Long dc_card(long icdev, byte Mode, ref ulong Snr) LIBRARY "dcrf32.dll"

调用
Long ll_result
ulong Snr

ll_result = dc_card(180, 0, ref Snr)
SWELLXXJ 2012-10-31
  • 打赏
  • 举报
回复
st=dc_card(icdev,0,snr)

就行了,你只是调用控件而已,icdev,snr就是通过卡读取的信息而已
yaiger 2012-10-31
  • 打赏
  • 举报
回复
不知道楼上有没有注意到
st=dc_card(icdev,0,&snr);

问题:&snr是什么含义?在PB中如何实现呢?

现在不是定义外部函数的问题,而是调用返回值>0, 估计就是这个&snr的问题
所以想了解&snr表示什么意思,在PB里面如何实现
A啦Dbit 2012-10-30
  • 打赏
  • 举报
回复
PB9以前的版本
Function Long dc_card(long icdev, long Mode, ref unsignedlong Snr) LIBRARY "dcrf32.dll" alias 'dc_card'

PB10以后的版本
Function Long dc_card(long icdev, long Mode, ref unsignedlong Snr) LIBRARY "dcrf32.dll" alias 'dc_card;ansi'

这样试试

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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