以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 调取存储在扫码枪里的数据(厂家有提供dll) (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=122496) |
-- 作者:fubblyc -- 发布时间:2018/7/26 17:48:00 -- 调取存储在扫码枪里的数据(厂家有提供dll) 老师,扫码枪有仓储模式,也就是扫条码,将条码存储在枪里面。 然后用数据线插在电脑,通过厂家提供的dll文件,有例子(c#),可以读取里面的数据。 我将相关文件发上来,您帮我看下怎么转换成FT的语言。 主要实现两个功能: 1.读取扫码枪的数据放到指定的textbox框中 2.点击按钮,调用清空盘点枪数据函数,清空数据
[此贴子已经被作者于2018/7/26 17:50:48编辑过]
|
-- 作者:fubblyc -- 发布时间:2018/7/26 17:51:00 -- 文档有更新: 扫码枪读取数据一次只能60个字节,循环读取。
[此贴子已经被作者于2018/7/26 18:00:51编辑过]
|
-- 作者:有点甜 -- 发布时间: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 |
-- 作者:fubblyc -- 发布时间: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编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/7/27 12:05:00 -- 闪退有可能是foxtable不能使用你这个dll文件。
你用vs新建一个vb.net的项目,然后测试3楼代码。 |
-- 作者:fubblyc -- 发布时间:2018/7/27 14:27:00 -- 甜大,VB.NET不会写,我就这样复制进去调试 |
-- 作者:有点甜 -- 发布时间:2018/7/27 15:04:00 -- 1、把dll文件拷贝到项目的debug文件夹。
2、加一个按钮,写这个代码
Dim addr = &H2000
3、定义的代码,写到按钮代码的外面去。 |
-- 作者:fubblyc -- 发布时间:2018/7/27 15:14:00 -- 恩恩,谢谢甜老师,定义的代码,我这样写好像不对。。 |
-- 作者:有点甜 -- 发布时间:2018/7/27 15:26:00 -- Imports System.Text Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim addr = &H2000 End Sub |
-- 作者:fubblyc -- 发布时间:2018/7/27 15:30:00 -- 恩恩,甜老师,调试出来了,是不是不能用:如果要能用,要让他们怎么改呢。。。 |