请帮忙,读卡器怎么能读出卡号,附dll文件!

彷徨的龙 2003-11-07 03:43:36
我怎么也弄不出来,请多帮忙,他们给我的dll文件
声明之后的调用怎么做?????谢谢


别人给我的说明
****************************************************************
动态库函数
extern "C" BOOL PASCAL EXPORT ReadID(unsigned char *pdata); //读卡,卡号保存在 pdata中,返回ture读取成功,否则失败。
extern "C" BOOL PASCAL EXPORT IsLink(void); //测试设备是否连接

COM调用函数
类名 UsbdllLib
对象名 atlobj
方法: getCard() //返回string类型卡号
ltest() //返回bool值,测试设备连接

以上2种方式都可以实现从设备读取卡号,调用方法要放在单独线程中循环调用~~间隔越800毫秒就可以了。




dll文件在陶清论坛
http://www.pdriver.com/bbs5/dispbbs.asp?boardid=14&id=101803&star=1#637724
...全文
233 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzg8848 2003-11-13
  • 打赏
  • 举报
回复
你把源码中的申明改成:
extern "C" _declspec(dllexport) BOOL __stdcall ReadID(unsigned char *pdata)
重新编译。应该可以了^_^
zzutligang 2003-11-12
  • 打赏
  • 举报
回复
其实这个错误信息就已经很详细地告诉你问题的所在了,声明的时候要求按地址传送,调用的时候确实按值传送,这样ReadID函数中的返回值就没有地方返回了,所以就提示这样的提示了。
Error:Specified argument type differs from required argument type at runtime in Dll function readid.
(invalid stack pointer on return from function call)at line 14 in clicked event of object cb_1 of aaa
zzutligang 2003-11-12
  • 打赏
  • 举报
回复
声明的时候你这样
FUNCTION boolean ReadID(ref string pdata) LIBRARY "usbdll.dll"
调用的时候这样肯定是不行的
idreturn=readid(cardid)
你要这样调用
idreturn=readid(ref cardid)
肯定可以。
gwly 2003-11-12
  • 打赏
  • 举报
回复
呵呵,学习,学习,
彷徨的龙 2003-11-12
  • 打赏
  • 举报
回复
高手再帮忙看看啊
彷徨的龙 2003-11-12
  • 打赏
  • 举报
回复
还是不行啊,咋办,用vb作出来的没有问题,为什么pb不行?
彷徨的龙 2003-11-11
  • 打赏
  • 举报
回复
我把dll源码找到了,大家帮我再看看



/*************************************************************
Funtion:ReadID
Description:读取ID卡卡号
Out:pdata--->返回存放ID卡卡号缓存区指针
return:
TRUE 成功
FALSE 失败
**************************************************************/
extern "C" BOOL PASCAL EXPORT ReadID(unsigned char *pdata)
//extern "C" _declspec(dllexport) BOOL ReadID(unsigned char *pdata)
{

int nBytes;
BYTE senddata[16];
BYTE temp[16];
CString str,str1,string;
senddata[0]=0x0a;//CMD ReadID
WritePort2(senddata,1);//写数据
nBytes=ReadPort2(temp,6);
if(nBytes==0x06)
{
if(temp[0]==0x01)
{
if((temp[1]|temp[2]|temp[3]|temp[4]|temp[5])==0) /*如果卡号全部为0,错误返回*/
{
return FALSE;
}
else
{
memcpy(pdata,&temp[1],6);
return TRUE;
}

}
else
return FALSE;
}
return FALSE;
}
彷徨的龙 2003-11-10
  • 打赏
  • 举报
回复
多谢各位,我再问问
tw829 2003-11-10
  • 打赏
  • 举报
回复
应该是DLL有问题,有些读卡器不要调用什么的,插到COM口就可以读了呀!
xzg8848 2003-11-10
  • 打赏
  • 举报
回复
会不会是动态库的问题?
我曾在pb6.5下调用VC写的COM口读写DLL,一直正常,后来升至pb8后出现和楼主一样的问题。我在PB中用TRY语句抛弃错误,能取到正确值。但这样总觉得不爽,最后发现DLL中函数调用申明有问题,在申明中加了__stdcall后,一切正常。
楼主不妨看看你的DLL原代码!
lmby 2003-11-10
  • 打赏
  • 举报
回复
响一下应该是读卡了,你只允许islink()会响么?应该不会吧。
彷徨的龙 2003-11-10
  • 打赏
  • 举报
回复
现在就是能响一下,那么就说明连接正常,你说呢,但是返回的值不对
xyzliuin 2003-11-08
  • 打赏
  • 举报
回复
关注
学习
lmby 2003-11-08
  • 打赏
  • 举报
回复
ref char还不对?那就没招了:(
不过你好像应该先掉ISLINK()
彷徨的龙 2003-11-08
  • 打赏
  • 举报
回复
但是readid之后就响一下,然后就提示上面的错误,我觉得readid()肯定是工作的了,但是返回的值不对,要不就是参数类型没有设置好,各位能再帮忙看看把?
lmby 2003-11-07
  • 打赏
  • 举报
回复
sorry, 应该是
function boolean ReadID(ref char pdata) library "dll_name"
彷徨的龙 2003-11-07
  • 打赏
  • 举报
回复
关键就是这个,参数的type不对,请帮忙!!
qqjj7758 2003-11-07
  • 打赏
  • 举报
回复
up
pdata用string?
彷徨的龙 2003-11-07
  • 打赏
  • 举报
回复
我是这样做的

声明:
Function string getcard(string iicardid) Library "usbdll.dll"
FUNCTION boolean IsLink() LIBRARY "usbdll.dll"
FUNCTION boolean ReadID(ref string pdata) LIBRARY "usbdll.dll"
然后调用:
boolean idreturn
string cardid
cardid=space(256)
idreturn=readid(cardid)
if idreturn=true then
messagebox("tishi","success!!")
else
messagebox("tishi","fail!!")
end if
sle_1.text=string(idreturn)


结果说我readid()不对,就是上面的提示,急!
mittee 2003-11-07
  • 打赏
  • 举报
回复
传入函数内的参数类型不对。
你在函数区可能要如下声明:
FUNCTION boolean ReadID(ref string data) LIBRARY "XXXX.dll"
加载更多回复(2)

1,079

社区成员

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

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