使用 QMetaObject 和 QMetaMethod,从Dll库中导出类,Dll库类继承QOject

Dll库代码:

  • .h
#ifndef DLLDEMO_H
#define DLLDEMO_H
#include <QObject>
#include "DllDemo_global.h"extern "C" DLLDEMO_EXPORT void *CreatInst(char *strpart);class DLLDEMO_EXPORT DllDemo : public QObject
{Q_OBJECT
public:DllDemo();
public slots:QString getString();private:QString m_str = "123";
};#endif // DLLDEMO_H
  • .cpp
#include "dlldemo.h"extern "C" void *CreatInst(char *strpart)
{Q_UNUSED(strpart)return new DllDemo();
}DllDemo::DllDemo()
{
}QString DllDemo::getString()
{return m_str;
}

看了网上很多种导出类库的方式,隐式调用,显示调用,虚函数表等等方式均不能正常调用,原因可能正常C++方式导出的虚函数表与库中函数无法正确匹配造成,最络使用GPT给了思路,使用。

核心代码如下:

 // 使用 QMetaObject 和 QMetaMethod 调用 getString 方法const QMetaObject *metaObject = dllDemo->metaObject();int methodIndex = metaObject->indexOfMethod("getString()");if (methodIndex != -1) {QMetaMethod method = metaObject->method(methodIndex);QString result;method.invoke(dllDemo, Q_RETURN_ARG(QString, result));qDebug() << "Result:" << result;} else {qDebug() << "Failed to find getString method.";}

完整代码:https://download.csdn.net/download/wml00876/89349931

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

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

相关文章

解决无法启动Redis,打开redis-server闪退的问题

【问题】 ① 双击redis-server.exe闪退。 ② 终端运行redis-server没反应。 但是终端运行redis -cli没问题。 【解决方法】 步骤1&#xff1a;找到Redis文件夹&#xff0c;右击&#xff0c;在终端打开。 步骤2&#xff1a;输入命令&#xff1a;redis-server.exe redis.windows…

深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

【简单介绍下爬山算法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

信息学奥赛初赛天天练-10-组合数学-排列组合-一次彻底搞懂分组分配问题

更多资源请关注纽扣编程微信公众号 平均分组 是指将所有的元素分成所有组元素个数相等或部分组元素个数相等&#xff0c;即m个不同的元素平均分成n个组&#xff0c;有多少种分组方法 由于是平均分组&#xff0c;分组选择元素时会出现重复&#xff0c;因此结果需要除以A(n,n…

代码随想录-算法训练营day46【动态规划08:单词拆分、多重背包!背包问题总结篇!】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part08● 139.单词拆分 ● 关于多重背包&#xff0c;你该了解这些&#xff01; ● 背包问题总结篇&#xff01; 详细布置 关于 多重背包&#xff0c;力扣上没有相关的题目&#xff0c;所以今天大家的…

知了传课Flask学习(持续更新)

一、基础内容 1.Flask快速应用 pip install flask from flask import Flaskapp Flask(__name__)app.route(/) def index():return Hello worldif __name__ __main__:app.run() 2.debug、host、port配置 from flask import Flask,requestapp Flask(__name__)app.route(/) d…

【全部更新完毕】2024电工杯A题数学建模详细思路代码文章分享

A 题&#xff1a;园区微电网风光储协调优化配置 摘要 在全球范围内&#xff0c;气候变化和环境污染问题日益严重&#xff0c;减少碳排放和实现可持续发展成为各国的共同目标。新能源&#xff0c;尤其是风能和光伏发电&#xff0c;因其清洁、可再生的特性&#xff0c;正在全球范…

Golang | Leetcode Golang题解之第100题相同的树

题目&#xff1a; 题解&#xff1a; func isSameTree(p *TreeNode, q *TreeNode) bool {if p nil && q nil {return true}if p nil || q nil {return false}queue1, queue2 : []*TreeNode{p}, []*TreeNode{q}for len(queue1) > 0 && len(queue2) > …

# Selenium 与浏览器自动化

Selenium 是一个用于自动化 Web 应用程序测试的工具。Selenium 支持多种编程语言&#xff0c;包括 Python、Java、C# 和 Ruby&#xff0c;并且可以与主流的 Web 浏览器进行交互&#xff0c;以实现自动化测试。以下是关于 Selenium 和浏览器自动化的一些介绍。 浏览器自动化的重…

nextcloud 安装部署

php版本不对 ubuntu nginx 配置php 网站-CSDN博客 抄自chatgpt ubuntu完全卸载干净某个包-CSDN博客 以及设置基本的php nginx环境参照上面两篇博文 然后参照官方文档 Example installation on Ubuntu 22.04 LTS — Nextcloud latest Administration Manual latest document…

Spring与Netty底层源码解析

Spring与Netty底层源码解析 1. 背景 在现代的Java架构开发中&#xff0c;Spring框架已经成为了不可或缺的一部分&#xff0c;而Netty作为一款高性能、异步事件驱动的网络应用框架&#xff0c;被广泛应用于网络通讯领域。本文将介绍Spring与Netty的整合以及深入解析Netty的底层…

5月30日在线研讨会 | 面向智能网联汽车的产教融合解决方案

随着智能网联汽车技术的快速发展&#xff0c;产业对高素质技术技能人才的需求日益增长。为了促进智能网联汽车行业的健康发展&#xff0c;推动教育链、人才链与产业链、创新链的深度融合&#xff0c;经纬恒润推出产教融合相关方案&#xff0c;旨在通过促进教育链与产业链的深度…

第八节 条件装配案例讲解

一、条件装配的作用是什么 条件装配是 Spring 框架中一个强大的特性&#xff0c;使得开发者能够创建更加灵活和可维护的应用程序。在 Spring Boot 中&#xff0c;这个特性被大量用于自动配置&#xff0c;极大地简化了基于 Spring 的应用开发。 二、条件装配注解 <dependen…

Function Calling 介绍与实战

functions 是 Chat Completion API 中的可选参数&#xff0c;用于提供函数定义。其目的是使 GPT 模型能够生成符合所提供定义的函数参数。请注意&#xff0c;API不会实际执行任何函数调用。开发人员需要使用GPT 模型输出来执行函数调用。 如果提供了functions参数&#xff0c;…

AIGC:AI整活!万物皆可建筑设计

在过去的一年里 AI设计爆火 各行业纷纷将之用于工作中 同时不少网友也在借助它整活 万物皆可设计 甲方骂我方案像屎一样 于是我就回馈他屎一样的方案 他有点惊喜&#xff0c;但是没话 不是吧&#xff0c;随便找了个充电头图片 也能生成建筑设计&#xff01;这都能行 鸟…

BACnet/IP IO系统 可实时监控IO模块通信状态

BACnet/IP IO系统BL207是钡铼技术基于最新的楼宇控制网络Building Automation Control Network技术推出的分布式、可插拔、结构紧凑、可编程IO系统。内置可编程逻辑控制功能&#xff0c;可替代DDC部分功能。 BACnet/IP IO系统BL207提供双网口支持交换机级联功能&#xff0c;支…

【spring】@CrossOrigin注解学习

CrossOrigin介绍 CrossOrigin 是 Spring Framework 中的一个注解&#xff0c;用于处理跨域资源共享&#xff08;CORS&#xff09;问题。CORS 是一种机制&#xff0c;它使用额外的 HTTP 头来告诉浏览器&#xff0c;让运行在一个 origin (domain) 上的Web应用被准许访问来自不同…

虹科Pico汽车示波器 | 免拆诊断案例 | 2017款奔驰E300L车行驶中发动机偶尔无法加速

故障现象 一辆2017款奔驰E300L车&#xff0c;搭载274 920发动机&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车行驶中发动机偶尔无法加速&#xff0c;且车辆发闯。 故障诊断 用故障检测仪检测&#xff0c;发动机控制单元&#xff08;N3/10&#xff09;中存储…

HTML5 MathML用法详解

目录 MathML的基本结构MathML元素分类浏览器支持与渲染MathML与LaTeXMathML示例MathML是一种标记语言,用于在网页中表示数学公式和符号。它为数学、科学和技术出版物提供了标准化的、结构化的表示方式,使得复杂的数学表达式能够被浏览器准确解析和渲染。 MathML的基本结构 …

Labelme自定义数据集COCO格式【实例分割】

参考博客 labelme标注自定义数据集COCO类型_labelme标注coco-CSDN博客 LabelMe使用_labelme中所有的create的作用解释-CSDN博客 1制作自己的数据集 1.1labelme安装 自己的数据和上面数据的区别就在于没有.json标签文件&#xff0c;所以训练自己的数据关键步骤就是获取标签文…