项目研发实录:电子称SDK封装dll给到QT和C#调用

本文主要初略展示使用QT通过Modbus协议读写电子称数据封装成动态库dll文件,并在QT新的项目中调用sdk的过程和步骤,不涉及详细代码的展示。

一、电子秤SDK功能说明:

打开电子秤:根据当前设置的串口号和默认参数连接电子秤。

关闭电子秤:关闭当前已打开的电子秤连接。

称重:获取当前电子秤上当前物品的重量数据,单位:克,误差范围n克。

清零:如果电子称的称重数据跟真实称重数据误差超出范围时,将称上所有物品移除后,发送清零指令后再称重则会恢复正常。

设置端口号:允许更改设备连接的串口号(如:COM3,COM6)等进行连接。

恢复默认配置:当端口号设置错误或者配置文件人为更改有误时,通过恢复默认配置可重新正确跟电子称进行连接通信。

保存当前配置:当设备连接电脑的端口号有调整时,可以保存当前配置的端口号到配置文件中,下次可直接加载使用当前配置号的设备连接参数。

加载称重配置:从配置文件中加载最新的端口号、波特率等连接参数到SDK中。

获取设备连接状态:进行称重、清零等操作时必须先跟电子称进行连接,如果没有建立串口通信连接则提示连接状态为0,已建立连接则提示为1。

获取所有可用端口:当SDK默认的端口号被别的程序占用或者不可以使用时,可获取当前最新的可用端口号列表,返回多个端口号用分号隔开。

二、电子秤SDK项目创建

参考网上的QT封装DLL项目架构,调整项目配置文件中的代码如下:

复制代码
QT       += core gui gui-private concurrent printsupport xml network serialbus serialport
greaterThan(QT_MAJOR_VERSION,4): QT+= widgets
greaterThan(QT_MAJOR_VERSION,5): QT+= core5compat

TARGET   = WeightSDK
TEMPLATE = lib
CONFIG += dll
CONFIG += c++11
CONFIG += warn_off
CONFIG += utf8
DLLDESTDIR   = ../../WeightSDKQtDemo/Release/release/

调整公开对外调用接口定义如下:

复制代码
#ifdef __cplusplus
extern "C"
{
#endif


extern "C" __declspec(dllexport) double Add(double arg1,double arg2);//加法运算
extern "C" __declspec(dllexport) void SetName(char *name);//设置名称
extern "C" __declspec(dllexport) char* GetName();//获取名称

extern "C" __declspec(dllexport) void _stdcall InitialSdk(WeightDataCallBack pDataCallBack);//初始化系统设置
extern "C" __declspec(dllexport) void _stdcall SetWeightData(int pType, char* pData);//设置称重操作类型和数据

#ifdef __cplusplus
}
#endif

编译SDK项目会生成WeightSDK.dll和WeightSDK.lib文件。

三、创建QT调用SDK对应动态库文件的WeightSDKDemo项目

3.1拷贝SDK项目对应的dll文件到当前项目的lib目录下和Release目录下

3.2在.pro项目文件中添加电子秤SDK的引用

复制代码
#调用WeightSDK.dll配置代码,提前将dll文件拷贝到项目的lib目录下
LIBS += -L$$PWD/lib/ -lWeightSDK

3.3代码中编写调用SDK对应方法代码

复制代码
    //加载动态库
    QString myLibraryPath = QApplication::applicationDirPath() + "/WeightSDK.dll";
    QLibrary* myLibrary = new QLibrary(myLibraryPath);
    if(myLibrary->load())
    {
        Log4qt<<"初始化动态库成功!";
        InitialSdk myFun = (InitialSdk)myLibrary->resolve("InitialSdk");
        if (myFun)
        {
            myFun(setCallBackFunc);
            Log4qt<<"设置回调成功";
        }
        else
        {
            Log4qt<<"设置消息回调失败";
        }
    }
    else
    {
        Log4qt<<QString("初始化动态库失败:%1").arg(myLibraryPath);
    }

四、QT中调用电子秤SDK实例

相关推荐
Oll Correct12 小时前
实验二十五:从IPv4向IPv6过渡所使用的隧道技术
网络·笔记
楼兰公子12 小时前
《深入理解Linux网络技术内幕》配套学习大纲 + 源码Demo + 进阶实战实例
linux·arm开发·学习
programhelp_12 小时前
Google 2026 New Grad SDE VO 三轮面试详解 | 含Behavioral、Coding、Design
java·服务器·数据库
c++逐梦人12 小时前
五种IO模型与⾮阻塞IO
开发语言·网络
冰冰的米咖12 小时前
交换与路由技术整理与总结(持续更新版)
网络·网络协议·智能路由器
樱桃花下的小猫12 小时前
腐蚀Rust-服务器插件模组教程
服务器·新手友好·云鸢互联·零门槛一键开服·腐蚀rust
Sagittarius_A*12 小时前
H3CSE 高性能园区网:Smart Link 与 Monitor Link 技术详解
网络·计算机网络·h3cse
青梅橘子皮12 小时前
Linux---开发工具(2)(makefile、进度条、git、gdb)
linux·运维·服务器
Ether IC Verifier13 小时前
TCP/IP协议握手原理详解——结合以太网连接过程
服务器·网络·数据库·网络协议·tcp/ip
剑神一笑13 小时前
Linux less 命令深度解析:从源码看分页器的设计智慧
linux·运维·less