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

news2024/11/15 8:26:08

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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

品牌渠道管控的风险与要点

品牌在管控渠道时&#xff0c;不仅要注重方法和效果&#xff0c;还得留意风险&#xff0c;以免被误解为“垄断”。在与品牌接触和服务过程中&#xff0c;我们整理出完善且合规的治理方法供品牌参考。先简单分享品牌控价的知识点。 价格管控指的是品牌对渠道低价、乱价情况的管理…

Vue 路由:一级路由,嵌套路由

1、安装路由插件,因为用的是vue2 所以路由版本要和vue2对应上&#xff0c;所有有3 yarn add vue-router3 2、在main.js里引入 import VueRouter from vue-router Vue.use(VueRouter) 3、新建文件夹 router,创建index.js 4、引入路由插件&#xff0c;并且暴露出来这个路由 5、在…

【OpenCV】CUDA讲解(一)

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 公众号&#xff1a;VTK忠粉 前言 本文分享关于CUDA的知识&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xf…

探索 doc 和 docx 文件格式的区别

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Vue脚手架引入vant 以及 Vant is not defined原因

本文基于vue 2.6.14 以及 vant 2.13.2 版本的 vue-cli 脚手架。 一. 引入vant Vant 2 - 轻量、可靠的移动端组件库 (vant-ui.github.io) 引入 vant npm i vantlatest-v2 -S 引入官网所说的自动按需引入组件 npm i babel-plugin-import -D 配置 babel.config.js (.babel…

还能报名!风靡硅谷开发者的Unstructured Data Meetup 杭州站与您6月15日见面!

“最硅谷”的Unstructured Data Meetup即将来到杭州西溪&#xff01; 众所周知&#xff0c;AI 三要素包括&#xff1a;算力、算法和数据。数据的价值愈发凸显&#xff0c;而其中非结构化数据更是备受关注。IDC 预测&#xff0c;到 2027年&#xff0c;全球数据总量中将有超过 8…

Kubernetes 如何删除 Terminating 状态的 Pod

在 Kubernetes (k8s) 中&#xff0c;Pod 是运行容器化应用的最小部署单元。当我们删除一个 Pod 时&#xff0c;通常它会快速进入 Terminating 状态并被删除。然而&#xff0c;有时由于种种原因&#xff0c;Pod 会长时间停留在 Terminating 状态。本文将详细介绍如何处理和删除这…

MyBatis的运行原理

目录 1、目的&#xff1a;梳理一下MyBatis运行时的几个对象&#xff0c;我们需要搞清楚他们的作用&#xff0c;进而需要理解mybatis的整个工作流程和执行原理。 2、简要概括各个类 2.1 Resources 作用&#xff1a;编写资源加载类&#xff0c;使用类加载器加载 配置文件(myb…

AI驱动的电子元器件商城物流优化

随着电子元器件市场的不断发展&#xff0c;电子元器件商城&#xff08;ECM&#xff09;的物流管理变得越来越复杂。如何通过人工智能&#xff08;AI&#xff09;技术优化物流流程&#xff0c;提高物流效率&#xff0c;成为电子元器件商城需要解决的重要问题。本文将探讨AI驱动的…

RawChatGPT:公益大模型使用网站

文章目录 一、Rawchat简介1.1 RawChat的主要特性1.2 RawChat的技术原理简述 二、使用教程三、案例应用3.1 图片内容分析3.2 生图演示3.3 文档解析 一、Rawchat简介 RawChat平台的诞生&#xff0c;其核心理念是降低用户访问类似ChatGPT这类先进AI服务的门槛&#xff0c;同时提供…

Python基础教程(十四):OS 文件/目录方法

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【Python】一文向您详细介绍 sys.argv

【Python】一文向您详细介绍 sys.argv 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;曾…

数字化:蚓链帮你打通企业营销线上线下的“任督二脉”!

​在这个飞速发展的时代&#xff0c;数字化如同一把神奇的钥匙&#xff0c;开启了企业营销的全新篇章&#xff01;它正以惊人的力量助力企业实现线上线下的融合&#xff0c;为企业带来新的机遇和挑战&#xff01; 数字化成为企业营销的关键驱动力。它通过多种方式实现线上和线…

AI助手:Agent工作流程与应用场景详解

引言 智能体&#xff08;Agent&#xff09;是一种在特定环境中自主行动、感知环境、做出决策并与其他智能体或人类进行交互的计算机程序或实体。它们具备自主性、反应性、社交性和适应性等特点&#xff0c;能够根据环境的变化调整自己的行为&#xff0c;以达到预设的目标。本文…

晶体管类型及结构,晶体管的电流放大作用

晶体管类型及结构 1.3.1 晶体管的结构及类型根据不同的掺杂方式在同一个硅片上制造出三个掺杂区域&#xff0c;并形成两个PN结&#xff0c;就构成晶体管。采用平面工艺制成的 NPN型硅材料晶体管的结构如图1.3.2(a)所示&#xff0c;位于中间的P区称为基区&#xff0c;它很薄且杂…

MySQL JDBC驱动包引入有版本要求吗

提示&#xff1a;有关数据库的任何操作&#xff0c;请事先都做好备份&#xff0c;一定不会错的&#xff1b; 文章目录 前言一、com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver如何选择&#xff1f;1、概念2、引入驱动3、总结 前言 新老项目的交替中&#xff0c;如果你使用的…

旅游网页(HTML+CSS+JS)

前言 本篇博客就不给大家讲解了&#xff0c;直接上代码 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;https://blog.csdn.net/2302_78381559/category_12644031.html?spm1001.2014.3001.5482https://blog.csdn.net/2302_78381559/catego…

最受欢迎的测试用例管理工具,14款软件全方位对比

14款不错的测试用例管理工具对比&#xff1a;PingCode、TestRAIl、Xray、PractiTest、Tricentis qTest、禅道&#xff08;ZenTao&#xff09;、Zephyr、Tapd、TestLink、TestCollab、Testin云测、云效&#xff08;Alibaba Cloud Effect&#xff09;、TeavCloud、FitNesse。 在软…

如何做好期货投资?

期货&#xff0c;这个词对于很多人来说可能还是个陌生的词汇&#xff0c;但是&#xff0c;随着经济的发展和人们对金融投资的需求增加&#xff0c;期货投资也变得越来越受到关注。那么&#xff0c;如何才能做好期货投资呢&#xff1f; 首先&#xff0c;了解期货的基本知识是非…

Linux网络编程(二)Socket编程

Socket编程 一、网络套接字概念&#xff1a;socket 一个文件描述符指向一个套接字&#xff08;该套接字内部由内核借助两个缓冲区实现。&#xff09;在通信过程中&#xff0c; 套接字一定是成对出现的。二、网络字节序和主机字节序的转换函数&#xff08;ip和端口&#xff09…