【Qt】Qt6调用Visual Studio2019生成的动态库详解
发布日期:2021-06-29 20:52:09 浏览次数:3 分类:技术文章

本文共 3418 字,大约阅读时间需要 11 分钟。

00. 目录

文章目录

01. 开发环境

Qt环境:Qt5.15 或者Qt6

VS环境:Visual Studio 2019

02. Visual Studio 2019生成动态库

在这里插入图片描述

03. 新建Qt项目

3.1 创建Qt纯C项目

在这里插入图片描述

3.2 将Visual Studio 2019生成的动态库相关文件和头文件拷贝到当前Qt项目所在的目录中。

在这里插入图片描述

3.3 右击Qt项目,选择添加库

在这里插入图片描述

3.4 选择外部库

在这里插入图片描述

3.5 设置外部库

在这里插入图片描述

3.6 添加头文件,选择对应的.h文件即可

在这里插入图片描述

04. 编写测试程序

程序示例

#include 
#ifndef _MSC_VER#include
#endif#include
#include
#include
//包含Modbus相关头文件#include "modbus.h"//相关参数设置#define LOOP 1 //循环次数#define ADDRESS_START 0 //测试寄存器起始地址#define ADDRESS_END 99 //测试寄存器结束地址int main(void){
modbus_t* ctx = NULL; int ret = -1; int nums = 0; int addr = 0; int i = 0; int tmp = 0; uint16_t* tab_rq_registers = NULL; uint16_t* tab_rp_registers = NULL; //设置随机种子 srand((int)time(0)); //1. 创建一个TCP类型的变量 ctx = modbus_new_tcp("192.168.1.90", 10086); if (NULL == ctx) {
fprintf(stderr, "Error: %s\n", modbus_strerror(errno)); return 1; } else {
printf("设置TCP成功\n"); } //2. 设置Debug模式 ret = modbus_set_debug(ctx, TRUE); if (-1 == ret) {
fprintf(stderr, "Error: 设置Debug模式失败"); modbus_free(ctx); return 1; } //3. 连接Server ret = modbus_connect(ctx); if (-1 == ret) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); modbus_free(ctx); return 1; } //4. 计算需测试的寄存器个数 nums = ADDRESS_END - ADDRESS_START; //5. 申请内存 保存发送和接收的数据 tab_rq_registers = (uint16_t*)malloc((nums + 1) * sizeof(uint16_t)); if (NULL == tab_rq_registers) {
fprintf(stderr, "malloc failed\n"); modbus_free(ctx); return 1; } else {
memset(tab_rq_registers, 0, (nums + 1) * sizeof(uint16_t)); } tab_rp_registers = (uint16_t*)malloc((nums + 1) * sizeof(uint16_t)); if (NULL == tab_rp_registers) {
fprintf(stderr, "malloc failed\n"); modbus_free(ctx); return 1; } else {
memset(tab_rp_registers, 0, (nums + 1) * sizeof(uint16_t)); } //7. 测试保持寄存器的单个读写 //随机数字 for (i = 0; i < nums; i++) {
tmp = rand() % 100; tab_rq_registers[i] = tmp; if (0 == i) {
printf("写入的值: "); } printf("%hd ", tab_rq_registers[i]); } //换行 printf("\n"); addr = ADDRESS_START; //先写入,后读取该数据到指定的内存中 ret = modbus_write_and_read_registers(ctx, addr, nums + 1, tab_rq_registers, addr, nums + 1, tab_rp_registers); if (nums + 1 != ret) {
printf("Error modbus_write_and_read_registers: %d\n", ret); printf("Address: %d nums: %d\n", addr, nums + 1); } else {
//输出 for (i = 0; i < nums; i++) {
if (0 == i) {
printf("读取到的值: "); } printf("%hd ", tab_rp_registers[i]); } //换行 printf("\n"); } //再次读取数据 memset(tab_rp_registers, 0, (nums + 1) * sizeof(uint16_t)); ret = modbus_read_registers(ctx, addr, nums + 1, tab_rp_registers); if (nums + 1 != ret) {
printf("Error modbus_read_registers: %d\n", ret); } else {
//输出 for (i = 0; i < nums; i++) {
if (0 == i) {
printf("读取到的值: "); } printf("%hd ", tab_rp_registers[i]); } //换行 printf("\n"); } //8. 释放内存 free(tab_rp_registers); free(tab_rq_registers); //9. 断开连接 modbus_close(ctx); modbus_free(ctx); return 0;}

执行结果

在这里插入图片描述

05. 其它参考

加载示例

# 请配置 Mysql 的包含库路径win32:INCLUDEPATH  += "D:/Mysql/mysql-5.7.15-win32/include"# 请配置 Mysql 的静态库路径win32:LIBS += "-LD:/Mysql/mysql-5.7.15-win32/lib" -llibmysql

静态库标示符注意事项

-L :后面要跟的是lib文件的路径名,不可以有空格。

-l :后面跟的是要加载的静态库lib文件名,是文件名,不要加后缀名,要链接着写,别加空格。

Qt帮助文档

双击选中关键字 “LIBS” || “INCLUDEPATH” 按下键盘的F1键 调用 Qt自带的帮助文档。

加载不到静态库情形

空格路径

LIBS += “-LE:\Work For CEAC\joy_20161213\Code\External\bin” -lSystemModule_znjd

路径中存在空格时,务必用双引号引起来。

06. 附录

参考:

转载地址:https://dengjin.blog.csdn.net/article/details/116849902 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Qt】QModbusClient类
下一篇:【机器视觉】机器视觉博客汇总

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月09日 04时31分33秒