当前位置: 首页 > news >正文

VS2019+QT5.15调用动态库dll带有命名空间

VS2019+QT5.15调用动态库dll带有命名空间

vs创建动态库

参考:

QT调用vs2019生成的c++动态库-CSDN博客

demo的dll头文件:

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// DLL3_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef DLL3_EXPORTS
#define DLL3_API __declspec(dllexport)
#else
#define DLL3_API __declspec(dllimport)#endif// 此类是从 dll 导出的
class DLL3_API CDll3 {
public:CDll3(void);int name;int age;// TODO: 在此处添加方法。
};extern DLL3_API int nDll3;
extern DLL3_API CDll3;//extern "C"
namespace MathFunc{extern "C" {DLL3_API int fnDll3(void);DLL3_API int fnAdd(int a, int b);DLL3_API int fnSub(int a, int b);}}

 cpp

// Dll3.cpp : 定义 DLL 的导出函数。
//#include "pch.h"
#include "framework.h"
#include "Dll3.h"// 这是导出变量的一个示例
DLL3_API int nDll3=666666;// 这是导出函数的一个示例。
namespace MathFunc
{int fnDll3(void){return 666;}int fnAdd(int a, int b){return a + b;}int fnSub(int a, int b){return a - b;}
}/* DLL3_API int fnDll3(void){return 666;}DLL3_API int fnAdd(int a, int b){return a + b;}DLL3_API int fnSub(int a, int b){return a - b;}*/// 这是已导出类的构造函数。
CDll3::CDll3()
{return;
}

创建c++控制台项目调用测试:

把头文件.h与dll,lib拷贝到项目文件夹里面

VS创建QT项目调用测试:

创建项目后:

把头文件.h与dll,lib拷贝到项目文件夹里面

 头文件夹,右键添加现有项,选择Dll3.h

cpp文件调用测试:

#include "QtWidgetsApplication5.h"
#include "Dll3.h"
#pragma comment (lib,"Dll3.lib")
#include <qmessagebox.h>
#pragma execution_character_set("utf-8")QtWidgetsApplication5::QtWidgetsApplication5(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);int aa=MathFunc::fnAdd(1,2);QMessageBox::information(this,"title","加法结果:"+QString::number(aa));int aa2 = MathFunc::fnSub(9, 2);QMessageBox::information(this, "title", "减法结果:" + QString::number(aa2));}QtWidgetsApplication5::~QtWidgetsApplication5()
{}

报错解决方法参考:

vs QT项目E0898 非成员运算符要求类类型或枚举类型的参数C1083: ‘type_traits-CSDN博客

相关文章:

  • 分布式文件存储 - - - MinIO从入门到飞翔
  • Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别
  • Git工具
  • flutter中采用腾讯云COS进行图片存储
  • Flutter 实现dispose探测控件
  • 图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)
  • R调用Taxonkit展示系统发育信息
  • c++_0基础_讲解7 练习
  • C++中的中介者模式
  • 2.linux下的文件系统结构、磁盘管理以及常规操作
  • Excel中多条件判断公式怎么写?
  • Linux:基础IO(二.缓冲区、模拟一下缓冲区、详细讲解文件系统)
  • Ubuntu安装部署
  • [渗透测试学习] Runner-HackTheBox
  • 【Netty】ByteBuffer原理与使用
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【React系列】如何构建React应用程序
  • fetch 从初识到应用
  • java取消线程实例
  • leetcode-27. Remove Element
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spark学习笔记之相关记录
  • storm drpc实例
  • SwizzleMethod 黑魔法
  • vue-router 实现分析
  • 构建工具 - 收藏集 - 掘金
  • 基于遗传算法的优化问题求解
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何利用MongoDB打造TOP榜小程序
  • 消息队列系列二(IOT中消息队列的应用)
  • 由插件封装引出的一丢丢思考
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ###C语言程序设计-----C语言学习(3)#
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #QT(智能家居界面-界面切换)
  • (10)STL算法之搜索(二) 二分查找
  • (3)选择元素——(17)练习(Exercises)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (接口封装)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (一)基于IDEA的JAVA基础12
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .FileZilla的使用和主动模式被动模式介绍
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET MVC 验证码
  • .net 发送邮件
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net快速开发框架源码分享
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题