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


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

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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/27 15:34:00 [只看该作者]

新建的vb.net项目,平台请改成 .net framework 2.0 (右键属性那里设置)


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


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

甜老师,我平台改为 2.0 后,出现这样:

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


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


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

我看了网上的资料,改成3.5
那些警告没有了,出现这个:
引发类型为“System.ExecutionEngineException”的异常。

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

[此贴子已经被作者于2018/7/27 16:03:39编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/27 16:09:00 [只看该作者]

如果你不插入设备,直接执行代码,也报错?

 

我执行执行没问题。我的是32位的操作系统,如果你的事64位的,你可能需要更换成64为的dll文件。

 


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


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

不插设备是可以正常执行
当然弹出的就是空的
是64位的电脑
[此贴子已经被作者于2018/7/27 16:11:14编辑过]

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


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

甜老师,他这个读取每包只能读60个字节,他有写了个例子,先算出枪里面总共有多少字节,除以60,得出需要读几次。

调用函数例子:
先定义:
typedef char (* lpAddFun)(ULONGLONG Addr,UCHAR len,char *data);
typedef char (* lpAddFun1)(CString bar);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型

在需要调用的地方添加:
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模块
}

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/27 16:51:00 [只看该作者]

试试改成,如果不行,那你叫厂家给你一个C#或者vb.net的实例

 

Imports System.Text

Public Class Form1
    Public Declare Function Read_data Lib "get_API.dll" Alias "Read_data" (addr As ULong, len As Byte, ByRef data As Byte()) As Byte

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim addr As ULong = &H2000
        Dim len As Byte = 60
        Dim data(60) As Byte
        Dim result = Read_data(addr, len, data)
        MsgBox(result)
        MsgBox(data.length)
 

    End Sub
End Class

 

------------------------------------------------

 

 

Imports System.Text

Public Class Form1
    Public Declare Function Read_data Lib "get_API.dll" Alias "Read_data" (addr As ULong, len As Byte, ByRef data As StringBuilder) As Byte

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim addr As ULong = &H2000
        Dim len As Byte = 60
        Dim data as new stringbuilder(60)
        Dim result = Read_data(addr, len, data)
        MsgBox(result)
        MsgBox(data.tostring)
 

 

    End Sub
End Class


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


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

甜老师,试了还是一样。。。
关键是他们厂家不会写 c#和vb.net。他们说只要能看懂,例子的代码,能调用DLL,就可以自己写~
对了,他还有另外一个函数,就是发送设置码的,我照着写了,没报错,扫码枪有响。只是,只是响,并没有按发送的设置码执行命令。
比如是清除数据,结果是依然还在。
Imports System.Text
Public Class Form1
    Public Declare Function send_bar_code Lib "get_API.dll" Alias "send_bar_code" (ByVal bar As String) As Char

    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
result也是空的。。
[此贴子已经被作者于2018/7/27 17:33:11编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/27 17:34:00 [只看该作者]

1、是不是你的设置码错了?

 

        Dim bar = "%%EnterSet"
        Dim result = send_bar_code(bar)
        bar = "%%SpecCode18"
        result = send_bar_code(bar)
 
2、返回的结果是一个数值,你希望返回什么?
 
Public Declare Function send_bar_code Lib "get_API.dll" Alias "send_bar_code" (ByVal bar As String) As Byte
 
 

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/27 17:34:00 [只看该作者]

果不行,那你叫厂家给你一个C#或者vb.net的实例。关键是那个函数要怎么声明使用。

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