Foxtable(狐表)用户栏目专家坐堂 → 调取存储在扫码枪里的数据(厂家有提供dll)


  共有6530人关注过本帖树形打印复制链接

主题:调取存储在扫码枪里的数据(厂家有提供dll)

帅哥哟,离线,有人找我吗?
fubblyc
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 18:46:00 [只看该作者]

甜老师,第二个函数(发送设置码)可以了:他DLL文件更改了下,可以执行命令了,按照你说的换成Byte,也弹出返回值0(成功)了。。
Imports System.Text
Public Class Form1
    Public Declare Function Read_data Lib "get_API.dll" Alias "Read_data" (ByVal addr As ULong, ByVal len As UInteger, ByRef data As Char) As Char
    Public Declare Function send_bar_code Lib "get_API.dll" Alias "send_bar_code" (ByVal bar As String) As Byte

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim bar = "%%EnterSet"
        Dim result = send_bar_code(bar)
        MsgBox(result)
        bar = "%%SpecCode18"
        result = send_bar_code(bar)
        MsgBox(result)
    End Sub
End Class


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 18:48:00 [只看该作者]

现在第一个函数,他说 data 是 char 数组。看是不是用StringBuilder 是不是错的。。


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 19:04:00 [只看该作者]

甜老师,我这样改了,也没报错了,返回值也是0,成功。
但是byte 的 data.ToString 应该不对,如下图:

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20180727190357.png
图片点击可在新窗口打开查看

Imports System.Text
Public Class Form1
    Public Declare Function Read_data Lib "get_API.dll" Alias "Read_data" (ByVal addr As ULong, ByVal len As UInteger, ByVal data() As Byte) As Byte
    Public Declare Function send_bar_code Lib "get_API.dll" Alias "send_bar_code" (ByVal bar As String) As Byte

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim addr = &H20000
        Dim len = 60
        Dim data(60) As Byte
        Dim result = Read_data(addr, len, data)
        MsgBox("result:" & result)
        MsgBox(data.ToString)
    End Sub
End Class

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 19:18:00 [只看该作者]

甜老师,好消息,成功了。
Imports System.Text
Public Class Form1
    Public Declare Function Read_data Lib "get_API.dll" Alias "Read_data" (ByVal addr As ULong, ByVal len As UInteger, ByVal data() As Byte) As Byte
    Public Declare Function send_bar_code Lib "get_API.dll" Alias "send_bar_code" (ByVal bar As String) As Byte

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim addr = &H20000
        Dim len = 60
        Dim data(60) As Byte

        Dim result = Read_data(addr, len, data)
        MsgBox("result:" & result)
        Dim strText As String

        strText = BitConverter.ToString(data)
        MessageBox.Show(strText)
    End Sub
End Class

我扫的条码内容是:6922266449611

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180727191427.png
图片点击可在新窗口打开查看

接下去就是在FT里做循环取出所有值。
因为他一次只能有60个字节,甜老师,这个我们循环取出60个字节   FT要怎么写呢。。。
他是这样写的:
ULONGLONG addr = 0x20000;
ULONGLONG read_len = 0x1e0000; //读取最大长度  0x1e0000
UCHAR package_len = 60; //每包数据的长度
ULONGLONG count = read_len/package_len; //需要读取的次数
if (read_len%package_len != 0) //不等于0就需要增加次数
{
count++;
}
char buf[60] = {0};
UCHAR ng_num = 0; //0xff计数  连续4个0xff就见底了

HINSTANCE hDll;//句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary("get_API.dll");//动态加载DLL模块句柄
if(hDll)
{
addFun=(lpAddFun) GetProcAddress(hDll,"Read_data");//得到所加载DLL模块中函数的地址
if(addFun)
{
for (ULONGLONG i = 0; i < count; i++)
{
if (i+1 == count) //最后一次   读余数
{
package_len = read_len%package_len;
}
result=addFun(addr,package_len ,buf);
ng_num = 0;
for (int a = 0; a < package_len; a++)
{
if (-1 == buf[a])
{
ng_num++;
}
}
if (ng_num >= 4) //连续4个0xff  数据就到底了
{
break;
}
addr+=60;
}
}
FreeLibrary(hDll);//释放已经加载的DLL模块
}

[此贴子已经被作者于2018/7/27 19:19:12编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107024 积分:544351 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/7/27 20:39:00 [只看该作者]

Dim read_len As Long = &H1e0000
Dim package_len As Integer = 60
Dim count As Integer = Math.Ceiling(read_len/package_len)

For i As Integer = 1 To count
    If i = count Then '最后一次   读余数
        package_len = read_len Mod package_len
    End If
    '读取数据---------

    ‘判断数据是否结束
    Dim ng_num As Integer
    For i As Integer = 1 To package_len
        If data(i) = &Hff Then ng_num += 1
    Next
    
    If ng_num >= 4 Then
        Exit For '连续4个0xff  数据就到底了
    End If
Next
[此贴子已经被作者于2018/7/27 20:39:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/28 16:06:00 [只看该作者]

谢谢甜老师,蓝老师,搞定了!!!万分感谢!!!

 回到顶部
总数 26 上一页 1 2 3