QT读取DLL加载算法
有这样一个场景,我有一个GUI软件,把他想象成PS软件,集成了很多工具。现在我要添加新算法(PS工具),该怎么办?
有三种办法:
第一种我把新算法代码加到项目中,编译整个项目。
第二种,新算法代码封装成库,然后调用库,增添少量代码,编译整个项目。
第三种,源代码修改,可加载DLL,拿到DLL中的方法。DLL是派生类。
第一种第二种就不说了,详细说下第三种。
我首先写一个基类Tool,里面有process函数,show函数。
然后,新算法头继承自tool,比如钢笔工具PenTool。将工具打包成DLL,PenTool.dll,其中有一个概关键函数叫做CreatTool,返回类型为Tool* ,但是实际返回 new PenTool。有点像工厂模式。
在应用程序中(PS软件),初始化时加载DLL,获取所有DLL的CreatTool函数,保存在map<string,function>中。然后我使用工具时直接查询map的value,然后调用process函数,show函数,就能直接调用派生类的方法了。
下面给出部分代码:
首先是如何在应用程序中加载DLL
//----------应用程序--------------
QMap<QString, QLibrary*> dll_map;
void ToolBox::GetToolDLL(QString name)
{// 根据工具名称查找配置文件中的DLL路径QString dllPath = FindDLLPathByName(name);if (!dllPath.isEmpty()) {// 加载DLLQLibrary toolDLL(dllPath);if (toolDLL.load()) {dll_map.insert(name, toolDLL);}}
}
// 应该还有一个函数,输入文件夹名称,拿到文件夹下的所有DLL名称,
// 然后循环执行GetToolDLL 以加载所有的DLL
// ....
// ....
// ....
// ....Tool* ToolBox::NewToolObj(QString name)
{return (Tool*)((QLibrary*)dll_map[name]->resolve("CreatTool"));
}//--------------------算法程序-------------------------
class PenTool : public Tool
{Q_OBJECT
public:explicit PenTool (QWidget *parent = nullptr);~PenTool ();private:Ui::PenTool *ui;
};extern "C" SS_EXPORT Tool* CreatTool()
{return new PenTool();
}extern "C" SS_EXPORT void DestroyTool(Tool* tool)
{if (tool != nullptr){tool->Release();}
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
QT读取DLL加载算法
有这样一个场景,我有一个GUI软件,把他想象成PS软件,集成了很多工具。现在我要添加新算法(PS工具),该怎么办? 有三种办法: 第一种我把新算法代码加到项目中,编译整个项目。 第二种,新…...
![](https://img-blog.csdnimg.cn/99afed4448db44d8a87d98fdac24737a.png)
HTTPX-用于Python的下一代HTTP客户端
1、前言 在使用 Python 进行接口自动化时,大多数都会使用 requests 模块,requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。 本篇将介绍 Python 的下一代 HTTP 客户端 - HTTPX 2、简介 HTT…...
![](https://img-blog.csdnimg.cn/884dddb999f9445187be8174b7f6b9e3.jpeg#pic_center)
[LLM+AIGC] 01.应用篇之中文ChatGPT初探及利用ChatGPT润色论文对比浅析(文心一言 | 讯飞星火)
近年来,人工智能技术火热发展,尤其是OpenAI在2022年11月30日发布ChatGPT聊天机器人程序,其使用了Transformer神经网络架构(GPT-3.5),能够基于在预训练阶段所见的模式、统计规律和知识来生成回答,…...
![](https://img-blog.csdnimg.cn/img_convert/8e3637be4776380348488b3586d52727.png)
OCR -- 文本检测
目标检测: 不仅要解决定位问题,还要解决目标分类问题,给定图像或者视频,找出目标的位置(box),并给出目标的类别; 文本检测: 给定输入图像或者视频,找出文本的…...
![](https://img-blog.csdnimg.cn/c8e46078e9de4f3dbf8b750d30b5be04.png)
【系统架构】软件可靠性基础知识
导读:本文整理关于软件可靠性基础知识构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑,基于大量项目实践经验基础上,不断加深理论体系的理解,从而能够创造新解决系统相关问题。 目录 1、软件可靠性…...
![](https://www.ngui.cc/images/no-images.jpg)
相机Camera
Camera需与SurfaceView配合使用 Camera类常用方法: Camera.open() 创建Camera实例,打开相机 getParameters() 获取相机参数 release() 释放相机资源 setParameters(Camera.Parameters parameters) 设置相机参数 setPreviewDisplay(SurfaceHolder holde…...
![](https://img-blog.csdnimg.cn/img_convert/243853e47fe357175314558782dda209.png)
洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
【题目来源】https://www.luogu.com.cn/problem/P8815https://www.acwing.com/problem/content/4733/【题目描述】 逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中,元素的值只有两种可能&a…...
![](https://img-blog.csdnimg.cn/cecbd49791344fe1b2f9552367d09e6d.png)
ElementUI实现登录注册+axios全局配置+CORS跨域
一、搭建项目 1.1 安装 Element-UI 先确保是否安装了vue-cli脚手架工具 !!! 安装vue脚手架可以看看我的上一篇博客 构建好项目后通过npm安装element-ui cd 项目根路径 #进入新建项目的根目录 npm install element-ui -S #安装…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue 07 Vue中的数据代理
通过数据代理,我可以方便的使用vm.属性,修改data中的属性 什么是数据代理 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) 我们修改obj2的x属性,其实修改的是obj的x属性 <!DOCTYPE html&…...
![](https://img-blog.csdnimg.cn/3f1eeb8a2cbc4deeaede054b32c9186a.png)
Foxit PDF SDK Windows 9.1 Crack
Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…...
![](https://img-blog.csdnimg.cn/4be4c31a5dc549ccb8b30a062b1a1526.png)
UG NX二次开发(C++)-采用NXOpen方法计算体的质心
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、创建一个part文件3、测量质心的NXOpen方法3.1 方法说明3.2 质心测量的代码3.3 测试结果1、前言 在UG NX二次开发过程中,测量是一个很必要的功能,比如测量距离、角度、面的体积、边长、…...
![](https://img-blog.csdnimg.cn/54d176004f2e44fb886fc21e803bb1f0.png)
Java代码审计17之fastjson反序列化漏洞(2)
文章目录 1、类加载与反射调用1.1、类加载1.2、测试代码1.3、通过类的加载和反射调用evil类 2、Fastjson TemplatesImpl链调试2.1、链路总览2.2、调试构造利用链 3、fastjson反序列化TemplatesImpl 利⽤3.1、开启 Feature.SupportNonPublicField 得作用3.2、构造利用payload3.3…...
![](https://www.ngui.cc/images/no-images.jpg)
Fork/Join 框架是干什么的?
Fork/Join框架是Java中用于并行计算的一个重要工具,它旨在简化多线程编程,特别适用于分治任务的并行执行。Fork/Join框架的主要目标是提高多核处理器上任务的并行性,从而加速计算。 Fork/Join框架的核心概念包括以下几个要点: 分治策略:Fork/Join框架基于分治策略,将一个…...
![](https://img-blog.csdnimg.cn/5ea991b5e6a747e2b9bc4d6815393863.png)
电子信息工程专业课复习知识点总结:(五)通信原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第一章通信系统概述——通信系统的构成、各部分性质、性能指标1.通信系统的组成?2.通信系统的分类?3.调制、解调是什么?有什么用…...
![](https://img-blog.csdnimg.cn/6d8a836a47944a448afcfb6faedd71f2.png)
LeetCode算法二叉树—二叉树的中序遍历
目录 94. 二叉树的中序遍历 - 力扣(LeetCode) 代码: 运行结果: 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2&am…...
![](https://img-blog.csdnimg.cn/c334df1a64764cda9192a4222913f241.png)
ubuntu 18.04 中 eBPF samples/bpf 编译
1. history 信息 一次成功编译 bpf 后执行 history 得到的信息: yingzhiyingzhi-Host:~/ex/ex_kernel/linux-5.4$ history1 ls2 mkdir ex3 cd ex4 mkdir ex_kernel5 ls /boot/6 sudo apt install linux-source7 ls /usr/src/8 uname -r9 cd ex_kernel/10…...
![](https://img-blog.csdnimg.cn/2697ced04904454ca08480204bedc755.png)
新版Chromedriver在哪下载(Chromedriver 116.0.5845.188的寻找之旅)
不知道什么时候Chrome自动升级到116.0.5845.188了,害得我原来的Chromedriver 114无法使用了,无奈之下只好重新去下载。 可寻遍网络,都没找到Chromedriver116的版本。网上大多网友给的下载网址是chromedriver.storage.googleapis.com/index.ht…...
![](https://www.ngui.cc/images/no-images.jpg)
React基础知识点
1、简述什么是React(概念)? React是Facebook开发的一款用于构建用户界面的JS库。React一般被采用作为MVC中的V层,它不依赖其他任何的库,因此在开发中,可以与任何其他的库集成使用,包括Jquery等…...
![](https://img-blog.csdnimg.cn/367cdd0d243444058b4853241f4f1327.png)
linux用户和权限命令学习记录
文章目录 版权声明root用户(超级管理员)su和exit命令sudo命令为普通用户配置sudo认证 用户、用户组管理用户组管理getent命令 查看权限控制认知权限信息 修改权限控制chmod修改文件、文件夹的权限权限的数字序号chown修改所属用户、用户组 版权声明 本博…...
![](https://img-blog.csdnimg.cn/0a2896de137a4b998f6947ea0bcaafc3.png)
React(react18)中组件通信05——redux ➕ react-redux(含数据共享)
React(react18)中组件通信05——redux ➕ react-redux(含数据共享) 1. 前言1.1 React中组件通信的其他方式1.2 介绍React-Redux1.2.1 简单介绍React-Redux1.2.2 官网 1.3 安装react-redux 2. 简单改写redux的例子2.1 提供store2.2…...
![](https://img-blog.csdnimg.cn/aff91d2952344119b9ac0bf886fc0afd.png)
字符函数和字符串函数(1)
前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数. 1.求字符串长度 strlen 1.1 strlen size_t strlen ( const char * s…...
![](https://www.ngui.cc/images/no-images.jpg)
Visual Studio Code从GIT拉取vue项目并运行
安装Visual Studio Code 安装GIT 安装node.js,配置好环境变量 拉取项目 文章一 文章二 运行项目 文章一 提交代码 文章一...
![](https://img-blog.csdnimg.cn/31a39352b0104adfb73c8043ffdd3bfc.png)
【知识分享】Java获取全年每个月的有几周且每周是几号到几号
加哥本周给大家分享一期怎么用java把全年每个月有几周,本周是几号到几号的工具类。便于大家根据需求获取想要的形式进行改造。话不多说,直接给大家上代码。 package com.techfantasy.common.utils; import com.techfantasy.common.entity.DateRange; i…...
![](https://img-blog.csdnimg.cn/2fd347edd110408c9bed209fecccc823.jpeg)
学信息系统项目管理师第4版系列11_信息安全管理
1. 信息安全基础 1.1. 保密性(Confidentiality) 1.1.1. 信息不被未授权者知晓的属性 1.1.2. 确保信息不暴露给未授权的实体或进程 1.2. 完整性(Integrity) 1.2.1. 信息是正确的、真实的、未被篡改的、完整无缺的属性 1.2.2. 只有得到允许的人才能修改数据&…...
![](https://img-blog.csdnimg.cn/97428eded4964998a44483941ac15ca4.png)
sql注入原理分析
...
![](https://img-blog.csdnimg.cn/img_convert/b04f126bbb03a0ca25c4825f1978148c.png)
Mac磁盘空间满了怎么办?Mac如何清理磁盘空间
你是不是发现你的Mac电脑存储越来越满,甚至操作系统本身就占了100多G的空间?这不仅影响了电脑的性能,而且也让你无法存储更多的重要文件和软件。别担心,今天这篇文章将告诉你如何清除多余的文件,让你的Mac重获新生。 一…...
![](https://img-blog.csdnimg.cn/fa3fcf17132041d79de3cd5c6b25769b.png)
能ping通但无法上网的问题
大家好,今天我要和大家分享一下当你的IP地址能够成功 ping 通,却无法上网时该如何解决这个问题。这是一个相当常见的情况,在网络故障排查中经常遇到。别担心,我将为你揭开这个谜题,提供一些解决方案和技巧。 首先&…...
![](https://img-blog.csdnimg.cn/1dbfe24af28d4f929f7158242753de90.png#pic_center)
仿制 Google Chrome 的恐龙小游戏
通过仿制 Google Chrome 的恐龙小游戏,我们可以掌握如下知识点: 灵活使用视口单位掌握绝对定位JavaScript 来操作 CSS 变量requestAnimationFrame 函数的使用无缝动画实现 页面结构 实现页面结构 通过上述的页面结构我们可以知道,此游戏中…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis面试题(五)
文章目录 前言一、使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?二、 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?总结 前言 使用过 Redis 做异步队列么,你是怎么用的…...
![](https://img-blog.csdnimg.cn/5abf55f241164fe8af9b220bb9bf08d4.png)
组队竞赛(int溢出问题)
目录 一、题目 二、代码 (一)没有注意int溢出 (二)正确代码 1. long long sum0 2. #define int long long 3. 使用现成的sort函数 一、题目 二、代码 (一)没有注意int溢出 #include <iostream&g…...
![](/images/no-images.jpg)
网站建设推广营销策划/免费的app推广平台
原文链接:https://blog.csdn.net/forezp/article/details/80098675 本系列教程翻译于docker文档,文档地址:https://docs.docker.com/ ,由于某些原因,docker官方文档通常都是打不开,如果打不开,安装完docker…...
![](http://img-03.proxy.5ce.com/view/image?&type=2&guid=b356ad39-2d1f-eb11-8da9-e4434bdf6706&url=http://www.xnnews.com.cn/xxfl/hk91/customer/38563/oGXcdSNDtHRxfnDUbi7tts9Wd4mrSo1CzXqcFO3u.jpeg)
网站建设文案策划/百度seo排名公司
贵阳erp企业管理系统,随着互联网信息的快速发展,很多企业都会选择上erp系统来提高企业的管理效率。市场上通用的erp不少,但购买通用的erp系统都比较有局限性,所以有些企业会选择做erp定制开发,将企业管理理念和管理经验…...
![](/images/no-images.jpg)
繁昌网站建设/微信管理系统登录入口
一、功能要求 登录接口小程序(需实现的功能如下) 1、输入用户名和密码 2、认证成功后显示欢迎信息 3、输错三次后锁定 二、逻辑思路分析: 定义一个文件用于存储用户名和密码:passwd.db 定义一个文件用于记录输入3次错误后的用户名,…...
![](https://img-blog.csdnimg.cn/img_convert/70821d368a320e304eb3fe26f55faf9c.gif)
建设银行官网网站首页/搜易网托管模式的特点
梅学堂语数英精品学习资源免费领一二年级的小朋友,大部分处于形象思维快速发展,逻辑思维发展相对迟缓的状态。总的来说,孩子们的思维水平是在进步的,但是相对于解题来说他们依然会有所欠缺。例如,对初中生高中生来说&a…...
![](https://img-blog.csdnimg.cn/1c160ea2720c42e28feaf6a2e41daa01.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA546J6Z2i5aSn6Juf6b6Z,size_20,color_FFFFFF,t_70,g_se,x_16)
定制化网站建设/搜索引擎营销就是seo
目录 一、cut 1、基本用法: 2、实例 二、sed 1、基本用法 2、实例 三、awk 1、基本用法 四、sort 1、基本语法 一、cut cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。 1、基本用法: cut [选项参数] filename 参数说明…...
![](https://img-blog.csdnimg.cn/img_convert/d86e5a744255e6b13f847ecb2c7aa624.png)
wordpress-Cosy主题/苏州网站优化排名推广
由于一个中文是两个字符组成,在编码不一致的情况下会引发字符的“重新”组合,(半个汉字的编码字符与后面的字符组合生成新的“文字”)引发原本的结束符合“变异”,从而导致找不到结束符号,使得后面的CSS就会失效。css中出现乱码的…...