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


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

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

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
调取存储在扫码枪里的数据(厂家有提供dll)  发帖心情 Post By:2018/7/26 17:48:00 [只看该作者]

老师,扫码枪有仓储模式,也就是扫条码,将条码存储在枪里面。
然后用数据线插在电脑,通过厂家提供的dll文件,有例子(c#),可以读取里面的数据。
我将相关文件发上来,您帮我看下怎么转换成FT的语言。
主要实现两个功能:
1.读取扫码枪的数据放到指定的textbox框中
2.点击按钮,调用清空盘点枪数据函数,清空数据
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:扫码枪dll文件.zip


[此贴子已经被作者于2018/7/26 17:50:48编辑过]

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


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

文档有更新:
扫码枪读取数据一次只能60个字节,循环读取。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:例子.txt


[此贴子已经被作者于2018/7/26 18:00:51编辑过]

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


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

类似参考 http://www.foxtable.com/webhelp/scr/2417.htm

 

1、拷贝dll到安装目录;

 

2、在全局代码声明函数

 

Public Declare Function Read_data Lib "get_API.dll" Alias "Read_data" (addr As ulong, len As uinteger, byref data As Stringbuilder) As Char

 

3、调用

 

Dim addr = &H2000
Dim len = 60
Dim data As new Stringbuilder(60)
Dim result = Read_data(Addr,len,data)
msgbox(result)
msgbox(data.Tostring)


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


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

谢谢甜老师,哈哈,直接套用你的声明函数,在命令窗口调用你写的代码,直接闪退。我知道直接套用是不对的,不过不知道怎么弄~~~
我把他后面改写的例子发在这里哈,甜老师,你看能不能帮忙写个,我自己再改改~

get_API.dll  为库文件 需将放到程序目录和生成文件目录

有两个函数需要调用
读取扫码点枪数据函数:
char Read_data(ULONGLONG Addr,UCHAR len,char *data); //Addr为读取地址,len为读取长度,一次最多只能读60,data为接收数组
//返回参数: 0为成功 1为没找到扫码枪 2为命令发送失败   3为读取失败  4为读取长度过长
发送扫码枪设置码函数:
char send_bar_code(CString bar); //直接将设置码字符填入就可以了
//返回参数: 0为成功 1为没找到扫码枪 2为命令发送失败   3为读取数据失败
需将API_inc.h 放到程序目录,并添加头文件
#include "API_inc.h"
调用函数例子:
先定义:
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模块
}
第二个函数,发送扫码枪设置码:
CString send_bar;
send_bar = "%%EnterSet";   //  进入设置模式
HINSTANCE hDll;//句柄
lpAddFun1 addFun;//函数指针
hDll=LoadLibrary("get_API.dll");//动态加载DLL模块句柄
if(hDll)
{
addFun=(lpAddFun1) GetProcAddress(hDll,"send_bar_code");//得到所加载DLL模块中函数的地址
if(addFun)
{
plantextcount=addFun(send_bar);// 进入设置模式
Sleep(100); //等待100ms再发送
send_bar = "%%SpecCode18";   //  清楚盘点数据
plantextcount=addFun(send_bar);
}
FreeLibrary(hDll);//释放已经加载的DLL模块
}
[此贴子已经被作者于2018/7/27 12:00:49编辑过]

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


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

闪退有可能是foxtable不能使用你这个dll文件。

 

你用vs新建一个vb.net的项目,然后测试3楼代码。


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


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

甜大,VB.NET不会写,我就这样复制进去调试
是要怎么测试呢。。。

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


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


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

1、把dll文件拷贝到项目的debug文件夹。

 

2、加一个按钮,写这个代码

 

Dim addr = &H2000
Dim len = 60
Dim data As new Stringbuilder(60)
Dim result = Read_data(Addr,len,data)
msgbox(result)
msgbox(data.Tostring)

 

 

3、定义的代码,写到按钮代码的外面去。


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


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

恩恩,谢谢甜老师,定义的代码,我这样写好像不对。。

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


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


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

Imports System.Text

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

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

        Dim addr = &H2000
        Dim len = 60
        Dim data As New StringBuilder(60)
        Dim result = Read_data(addr, len, data)
        MsgBox(result)
        MsgBox(data.ToString)

    End Sub
End Class


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


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

恩恩,甜老师,调试出来了,是不是不能用:如果要能用,要让他们怎么改呢。。。

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


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