关于考勤机接口调用的问题

Bibubble1984 2007-07-25 02:06:28
小弟最近正在做一个考勤管理系统,使用的考勤机是由舒特电子提供的,考勤机是lan类型的,不是接串口的。厂商提供的硬件接口是用delphi开发的,主要的函数有以下几个:

function _GETVERSION():Pchar;stdcall;
返回值为动态库的版本号

function _LANREALDOWNLOAD(ipaddr:pchar):pchar;stdcall;export;
实时采集考勤机的最新一条刷卡数据,若考勤机在上次调用该函数之后没有新的刷卡记录,则返回'00000000000000000000',若有记录则返回“卡号(6位)+年(4位)+月(2位)+日(2位)+时(2位)+分(2位)+考勤机机号(2位)”。注意:该函数作为实时采集刷卡数据功能,需要不断地调用,考勤机记号要轮流更换。若长时间不调用该函数,且考勤机有多次刷卡,则调用该函数时只能采集到最新的刷卡记录。IPADDR为考勤机的IP地址。

。。。。。。


我现在在vb.net 2003 环境下调用该接口的_LANREALDOWNLOAD函数,返回的值是乱码,或者空串,调用其它和硬件相关的函数也会报错;只有调用_GETVERSION取版本号这种不参与通信的函数返回值才正确,以下是代码,请高手指正。

'*声明
<DllImport("..\bin\w_kqrec.dll", CharSet:=CharSet.Auto)> _
Public Shared Function _LANREALDOWNLOAD(ByVal ip As String) As String

End Function

'*调用
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s As String = String.Empty
s = _LANREALDOWNLOAD("172.26.32.147")
End Sub

s会出现乱码
...全文
635 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2007-07-26
  • 打赏
  • 举报
回复
字节数组是取不到的,什么类型的数组都取不到,报的错误是: 不能return values.
我试着声明返回intptr,返回了一串数字,也不知道是什么东西,反正不是我想要的。
会不会是调用pchar的时候需要分配内存??
======================
返回的是内存地址
try
Marshal.ReadByte( intptr , int//索引 )读取
Bibubble1984 2007-07-26
  • 打赏
  • 举报
回复
字节数组是取不到的,什么类型的数组都取不到,报的错误是: 不能return values.
我试着声明返回intptr,返回了一串数字,也不知道是什么东西,反正不是我想要的。
会不会是调用pchar的时候需要分配内存??
oo渣渣oo 2007-07-26
  • 打赏
  • 举报
回复
字节数组取到了?那只有自己想办法转码了
Bibubble1984 2007-07-26
  • 打赏
  • 举报
回复
嗯,我大概知道是什么错误了,接口返回的数据类型是pchar,而.net中只有string,数据类型不一致造成了乱码,请问各位高手有什么好的解决方法吗?
Bibubble1984 2007-07-26
  • 打赏
  • 举报
回复
多谢:)
oo渣渣oo 2007-07-25
  • 打赏
  • 举报
回复
Public Shared Function _LANREALDOWNLOAD(ByVal ip() As Byte) As Byte()

这样用字节数组的方式调用试试

然后把返回的字节数组拿来分析原因出在什么地方

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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