使用QT RemoteObject让两个软件(.exe)之间进行通信(VS2019+QT5.15)

2023-10-27

博主将两个软件进行通信是因为项目中出现调用的库只有32位的DLL和LIB,而自己写的软件却是64位,导致我的软件无法使用这个库,让我没办法控制。然后想到解决方法是写一个专门的32位软件调用这个库,然后通过与我现在写的软件进行通信,类似信号和槽的操作。

关于QT RemoteObeject的详细使用可以看QT助手,这里我简单的讲一下。

一.使用QT RemoteObeject首先创建需要的rep文件,rep文件可以先用txt文档写好再更改后缀即可。

这是我需要使用的是信号和槽,先在txt写好,文本格式使用UFT-8。(注意:写的时候不要加任何分号,不然会导致后面编译rep文件不成功。根据写代码风格,会习惯的添加分号,这个问题也困扰博主几个钟才发现是分号引起编译不成功)

写好txt更改后缀名并将文件放进项目代码下(对于代码管理有要求的可以创建文件单独放置rep文件)

二.编译rep文件(rep文件分客户端(REPLICA)和服务端(SOURCE))

因为博主写代码使用的是VS2019 IDE不会怎么操作编译生成rep文件就采取了比较曲折的方法(如果有会用VS编译rep文件的小伙伴也可以教教我)。

1.我这里先编译服务端(SOURCE)的rep。

在项目文件的Pro添加这两个圈住的必须的东西(QT += remoteobjects和REPC_SOURCE += iocontrol.rep(你要编译的rep文件名),如果你的rep是放进新建文件夹放的要指定相对位置,不然可能编译不成功)

2.编译操作

对文件先进行qmake,再进行构建,如果成功rep文件会自动添加近你的项目中

 这里是编译成功了,然后你打开他们编译生成文件会多了一个rep_你的rep文件名_source.h文件

 3.编译客户端(REPLICA)的rep(新建一个新的项目)

注意他们的pro文件夹有个地方不同

这里使用的是 REPC_REPLICA,然后进行上面先qmke,再构建,你就会发现这里也有一个rep_你的rep文件名_replica.h文件

好了,最重要的两个文件已经弄好了,接下来通过这两个文件将他们连接在一起。

 三.使用QT RemoteObject最重要的部分

我这里简单说一下,我这个32位软件是用QT写的,主项目是用VS2019写的。

1.首先我先将我这个32位软件的代码,我这个32位使用的是replica.h的文件

需要调用就要上头文件,这里需要上的头文件就是画线的那两个,懂得都懂。

 接下来在构造函数里面用connect将他们关联起来

 

 前三行对着写就行,connect这里的m_IoWrite8,m_IoRead8是不是很熟悉?这就是我们在txt上写的。说到这里很聪明的人就大概知道原理了,还不清楚的聪明人继续往下看。


下面设置我们的服务端,就是我的这个主项目怎么把这个信号传过去。

首先我们需要给我的vs项目属性添加上这两个

然后我将生成的rep_你的rep文件名_source.h文件,放进我的VS项目下面,

然后将他添加进项目里面后编译。

 接下来我们需要创建一个类继承我们写在rep文件里面的类

带vitual都是我们写rep文件时的定义的,这里SLOT槽函数必须都要在我们新建的这个类中定义不然会报错。 

这个m_IoWrite8和m_IoRead8是不是另外那个32位软件需要的信号。

下面就是将他们两个两个exe连接在一起的代码,前4行是打开那个exe的路径,接下来四行是连接两个exe代码

进行connect信号槽了,这样就大功告成了。

 为什么那两个rep文件这么重要,因为他们是联系两个exe的中间媒介。

提示:

1.因为你是命令这个exe运行指定代码的,所以你需要将这个exe打开才行,你不打开是无法控制的。

2.我VS使用的rep.h文件是专门在QT那里生成复制到VS下面的。

3.那个调用的exe记得关闭主项目的时候关联关掉,因为我这种打开exe的方式不会随主项目关闭而关闭。

4.我写博文主要以后我忘记怎么使用时看回博客会想起使用方法,也希望可以帮助到一些需要使用的小伙伴。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用QT RemoteObject让两个软件(.exe)之间进行通信(VS2019+QT5.15) 的相关文章

随机推荐

  • Python实现socket——udp的传输与接收

    udp的传输与接收 windows网络调试助手下载 https pan baidu com s 1IwBWeAzGUO1A3sCWl20ssQ 提取码 68gr 一 基本用法 1 创建套接字 udp socket socket socket
  • 数据埋点(打点)

    常用名词 PV UV DAU 活跃率 次日留存 7日留存 14日留存 PV 页面访问量 UV 访客访问数 DAU 日活跃用户量 其中 活跃率 该事件DAU 该页面DAU 次日留存 第1日活跃的用户在第二日依旧出发该点 DAU 第1日 DAU
  • NPM、NVM、NRM使用方法简述

    NPM是随同NodeJS一起安装的包管理工具 在前端开发中 经常会使用到NPM进行包管理 1 nrm 因为一些大家都明白的原因 访问官方网站速度受限 因为可以使用国内的镜像 但有时也会切换回官方源 经常切来切去会比较麻烦 因此需要nrm 1
  • leetcode 241. 为运算表达式设计优先级(c++)

    思路分析 最初理解这道题目时 认为任意一个运算符号都有运算优先级 即使出现相同的运算符 那么按照该思路解答 即采用回溯的方法即可解答 如题解1所示 但提交之后会显示 在讨论区得知 题目的意思应该是括号的位置不同算一个答案 而不是计算顺序不同
  • 使用response下载没反应

    response reset File excelFile new File filePath 1 设置文件ContentType类型 这样设置 会自动判断下载文件类型 response setContentType application
  • 安装持续集成工具Jenkins

    Jenkins是一个流行的持续集成框架 可以在我们提交项目的时候自动测试 运行和部署项目 虽然Jenkins使用Java编写 但是由于Jenkins支持多种语言的项目 所以现在很多公司都是用Jenkins来进行项目的持续集成 下载和安装 L
  • 9.2 构造函数的初始化表

    构造函数有个特殊的初始化方式叫 初始化表达式表 简称初始化表 初始化表位于函数参数表之后 却在函数体 之前 这说明该表里的初始化工作发生在函数体内的任何代码被执行之前 构造函数初始化表的使用规则 如果类存在继承关系 派生类必须在其初始化表里
  • 解决es中termsQuery查询中文字段查不到

    精确匹配 如果要使用name中文查询 是查不出来的 要改成name keyword 如果是数字 可以不用加 keyword TermsQueryBuildertermQueryBuilder QueryBuilders termsQuery
  • Cannot find module ... or its corresponding type declarations.(ts2307)

    vue3 ts项目出现这样的编译提示 红色下划线 Cannot find module or its corresponding type declarations ts2307 解决方法 第一步 关闭vetor 禁用状态 第二步 下载插件
  • Spring 核心loC

    目录 1 loC是什么 1 1 改变之前的程序 1 2 修改后的代码 1 3 解决上述代码耦合问题 2 理解Spring 是一个loC 控制反转 容器 3 DI dependency injection 依赖注入 4 loC DI 总结及优
  • 单片机c语言中断程序实验报告,单片机实验之外部中断应用实验

    一 实验目的 1 掌握中断系统外部中断源的使用方法 2 掌握延时程序的编程及使用方法 3 掌握Proteus软件与Keil软件的使用方法 4 掌握单片机系统的硬件和软件设计方法 二 设计要求 1 用Proteus软件画出电路原理图 在单片机
  • 门级网表

    在电路设计中 网表 netlist 是用于描述电路元件相互之间连接关系的 一般来说是一个遵循某种比较简单的标记语法的文本文件 门级 gate level 指的是网表描述的电路综合级别 顾名思义 门级网表中 描述的电路元件基本是门 gate
  • git 将本地代码推送到远程仓库(核心常用)

    1 首先默认已经提前安装并且配置好git 2 选择要克隆或者保存的目标文件夹下 右键选择Git Bash Here 3 如果是将远端的项目拉取到本地 使用 git clone 命令 因为之前已经clone下来了 所以这次就不下载了 4 使用
  • Python教程:第2章(Python进阶)2.8-2.11

    文章目录 2 8 四大数据结构 2 8 1 单向队列 List 2 8 2 双向队列 Queue 2 8 3 栈 Stack 2 8 4 链表 Link 2 9 八大基础算法 2 9 0 算法复杂度 2 9 1 穷举算法 2 9 2 归纳
  • sqli-labs 38-45

    第38关 堆叠注入 简单理解就是一条语句结束后再连接一条语句 这就叫堆叠注入 举几个最简单的例子 查询数据并创建一个数据库 select from users creat database test 查询数据并删除一个数据库 select
  • java实现成绩及格的判定( true & false )

    成绩及格的判定 代码思想 1 使用条件语句 大于60及格 否则不及格 代码如下 List item IF else语句执行 import java util Scanner public class Test02 public static
  • Spring Boot中的Actuator是什么?Spring Boot中的Starter依赖是什么?

    Spring Boot中的Actuator是什么 在Spring Boot中 Actuator是一种用于监控和管理应用程序的工具 它提供了一些额外的端点和功能 使开发人员能够更好地了解和控制他们的应用程序 Actuator提供了以下功能 指
  • 【计算机视觉

    文章目录 一 分割 语义相关 6篇 1 1 Consistency guided Meta Learning for Bootstrapping Semi Supervised Medical Image Segmentation 1 2
  • Qt Creater创建项目时无法选择Kit选项 No suitable kits found

    项目场景 初步学习Qt编程 Qt Creator 安装 问题描述 创建工程时无法选择Kit套件 原因分析 No suitable kits found 没有找到合适的kits套件 在安装Qt Creator时没有安装MinGW 最直接的办法
  • 使用QT RemoteObject让两个软件(.exe)之间进行通信(VS2019+QT5.15)

    博主将两个软件进行通信是因为项目中出现调用的库只有32位的DLL和LIB 而自己写的软件却是64位 导致我的软件无法使用这个库 让我没办法控制 然后想到解决方法是写一个专门的32位软件调用这个库 然后通过与我现在写的软件进行通信 类似信号和