调用DLL动态的问题

claidgu 2015-06-23 04:58:43
读卡器的函数说明在下列,打开端口的函数调用一切正常,但是调用发卡信息的函数一直报错,我怎么写都不对,有哪位大神能够指点一下。最好能详细一点。谢谢。


//社保卡开放信息
typedef struct TPublicInfoTag
{
char cCardNo[9]; /* 卡号*/
char cName[30]; /* 姓名 */
char cSex[1]; /* 性别*/
char cPersonalID[18]; /* 身份证号*/
char cPhone[15]; /* 联系电话 */
char cAddress[80]; /* 通信地址*/
char cPostCode[6]; /* 邮政编码*/
}TPublicInfo;

函数说明
yibao.dll 内函数说明

//打开串口,
如 handle=ICC_Reader_Open(“COM1”);

STDAPI ICC_Reader_Open(BYTE *pCOM);

//关闭串口 yibao.dll
STDAPI ICC_Reader_Close(int ReaderHandle);

iccdll.dll 内函数说明

//读取社保卡开放信息
STDAPI ReadPublicInfo(int ReaderHandle,TPublicInfo *pInfo); // iccdll.dll


以上函数返回为 int 型 大于 0 正确 小于0 错误
...全文
2473 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DD 2016-05-26
  • 打赏
  • 举报
回复
第二个参数是结构类型的
WorldMobile 2015-06-25
  • 打赏
  • 举报
回复
应该主要是结构的声明,建议你用byte试试
claidgu 2015-06-25
  • 打赏
  • 举报
回复
引用 5 楼 lzp_lrp 的回复:
应该主要是结构的声明,建议你用byte试试
谢谢您的回答,我开始怀疑API使用说明是不是错了,说明中 //关闭串口 yibao.dll STDAPI ICC_Reader_Close(int ReaderHandle); 那么只要我申明了 Function int ICC_Reader_close(int ReaderHandle) library "yibao.dll" 调用 li_i = ICC_Reader_close(123) 只会反馈小于0的数字,而不会报bad runtime function reference 的错误呀!
A啦Dbit 2015-06-24
  • 打赏
  • 举报
回复
//这样声明试试,不行的话就用blob 另外pb10以后要加alias ansi Function int ReadPublicInfo(int ReaderHandle,ref char pInfo[159]) library "iccdll.dll" string cCardNo,cName,cSex,cPersonalID,cPhone,cAddress,cPostCode li_i = ICC_Reader_open("COM4") char cCardNo[159] ReadPublicInfo(li_i,cCardNo)
claidgu 2015-06-24
  • 打赏
  • 举报
回复
前面那句li_i = ICC_Reader_open("COM4") 是贴错的,不用看。
claidgu 2015-06-24
  • 打赏
  • 举报
回复
我的写法是这样的,函数申明:Function int ReadPublicInfo(int ReaderHandle,ref string pInfo) library "iccdll.dll" string cCardNo,cName,cSex,cPersonalID,cPhone,cAddress,cPostCode li_i = ICC_Reader_open("COM4") cCardNo = space(9) ReadPublicInfo(256,cCardNo) 但是报对应函数类型错
claidgu 2015-06-24
  • 打赏
  • 举报
回复
引用 3 楼 xiajinxian 的回复:
//这样声明试试,不行的话就用blob 另外pb10以后要加alias ansi
Function int ReadPublicInfo(int ReaderHandle,ref char pInfo[159]) library "iccdll.dll"

string cCardNo,cName,cSex,cPersonalID,cPhone,cAddress,cPostCode
li_i = ICC_Reader_open("COM4")
char cCardNo[159]
ReadPublicInfo(li_i,cCardNo)

先谢谢上面的大哥回答,我研究了一下发现报错都是报句柄错误,我用 ICC_Reader_Close(int ReaderHandle)来试还是报相同错误,我是PB8.0难道也要加alias ansi?
例如:
int li_i
string ls_com
ls_com = "com4"
ii_handle = ICC_Reader_open(ls_com)
ICC_Reader_close(ii_handle)

ii_handle是全局函数
任然报错
bad runtime function reference

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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