接前面代码内容:

OPC Client第6讲(wxwidgets):Logger.h日志记录文件(单例模式);登录后的主界面_wx.logger-CSDN博客

OPC Client第8讲:OPC UA;KEPServerEX创建OPC服务器;C#创建OPC客户端;OpcUaHelper库;OPC客户端(Softing Opc Client和UaExpert)_c# opcua客户端-CSDN博客

一、登录后的主界面:MainFrame::InitElement()

即实现下述界面,直接看void MainFrame::InitElement()代码及备注

 

OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理-CSDN博客

OPC Client第4讲(wxwidgets):窗口布局基础知识;界面练习_wxwidgets wxstaticbitmap-CSDN博客

OPC Client第5讲(wxwidgets):实现项目的初始界面代码-CSDN博客

OPC Client第6讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容_propcclient控件-CSDN博客

1、如果在.h文件中声明了变量,.cpp中再次声明且初始化,那么这是同一个变量吗?

它们可以是同一个变量 —— 但前提是使用了正确的语法(如 extern 声明),否则就可能是重复定义或链接错误。

1>声明与定义 区别

声明:在头文件中,你通常会声明变量,这意味着你告诉编译器该变量的存在,但不分配内存空间。

定义:在源文件中,当你声明并初始化一个变量时,你实际上是在定义它,即为它分配内存空间。

2>正确做法:加extern

或者在.cpp文件中直接初始化:g_value = 42;(对比下图)

2、wxDataViewListCtrl:构建动态数据展示界面

wxDataViewListCtrl 提供了一种直观且高效的方法来展示和与列表数据进行交互,非常适合用来构建动态数据展示界面。

 

3、wxTreeListCtrl:显示层次结构数据的控件

wxTreeListCtrl是用于显示层次结构数据的控件,它结合了 wxTreeCtrl(树形控件)和 wxListCtrl(列表控件)的功能。

这个控件允许你以树的形式展示数据,并且每个节点可以有多列信息,而不仅仅是单一的标签。这使得 wxTreeListCtrl 成为需要展示具有多个属性的层次化数据的理想选择。

4、事件绑定处理??????????????????????

二、初始化准备:MainFrame::InitClient()

目的:获取初始界面InitFrame::OnConfirm函数传过来的配置参数config【如下图所有的初始化信息】。

这个函数是在一、之前进入的,如下图。

三、初始化准备1:“选择文件(右键)”——C++ 读写 Excel :利用开源库xlnt

二、的目的:获取初始界面InitFrame::OnConfirm函数传过来的配置参数config【如下图所有的初始化信息】。

这部分是实现二、的下图红框部分

C++ 读写 Excel :利用开源库xlnt

师傅是按照下述链接生成的xlnt文件夹,很奇怪。

1、利用CMake导入xlnt包

C++ 读写 Excel 在 vs2015 中实现(利用开源库xlnt)_xlnt读取中文-CSDN博客

【xlnt】入门级编译教程_xlnt编译-CSDN博客

按照上述链接的操作下载源代码等。

再在CMake文件中导入库,如下图。

再用CMake重新生成

2、Vcpkg导入xlnt包【报错放弃了】

下面自己尝试利用Vcpkg导入xlnt包:

Vcpkg C/C++库管理工具安装和使用教程(链接VS2019)_vcpkg 安装-CSDN博客

不知道为什么报错(如下图)

询问AI排除了其它原因,提示问题如下图

??????????????????/

下面一直显示不出来

3、xlnt详细操作:获取IP.xlsx和ServerAddress.xlsx文件里的表格数据

按照下述链接操作就行,具体看代码。

用XLNT库读写Excel文件 | 西加加斯基

注意两个工作簿(IP.xlsx和ServerAddress.xlsx)里都是有多张表的,如下图

1>如何切换一个xlsx文件下不同的表格?

xlnt 库中,一个 .xlsx 文件对应一个 workbook(工作簿),而一个工作簿可以包含多个 worksheet(工作表/表格)。

你可以通过工作表的 名称(name)索引(index) 来切换不同的表格。

2>静态成员:类内声明,类外初始化

3>为什么代码中还要额外using namespace UaApp?不是已经#include<UaApp/Types.h>了吗?

4>auto&

例如:auto& x = some_variable;

“让编译器自动判断 some_variable 是什么类型,并让 x 成为它的引用(即别名)。”

四、初始化准备2:“数据库连接配置(ODBC)”

二、的目的:获取初始界面InitFrame::OnConfirm函数传过来的配置参数config【如下图所有的初始化信息】。

这部分是实现二、的下图红框部分

1、什么是ODBC?为什么用ODBC?

ODBC( Open Database Connectivity)开放数据库连接【=翻译官】

因为我们这个暂时没确定用哪种数据库,所以使用的ODBC。

它是一种由微软提出的标准数据库访问接口(API),目的是让应用程序能够以统一的方式访问各种不同的数据库系统,而不需要为每种数据库编写不同的代码。

2、ODBC写代码

1>前提条件【之前已经做完了,没有做任何其它的操作】:

  1. 安装并配置好MySQL ODBC驱动(如MySQL Connector/ODBC)。
  2. 在“ODBC数据源管理程序”中配置一个系统DSN(数据源名称)

ODBC 安装/使用/编程-腾讯云开发者社区-腾讯云

  • 为什么 电脑注册表(Windows Registry)中自带ODBC?
    • ODBC作为微软主导的跨平台数据库连接标准,自Windows 95起就被深度集成到操作系统中。注册表作为Windows存储系统配置、驱动信息、应用程序参数的核心数据库,自然需要包含ODBC的配置项(如驱动路径、数据源定义等),以确保系统级功能(如数据源管理器、ODBC API调用)能正常工作。

2>ODBC理解+具体的代码写法:

【ODBC】ODBC连接数据库详细说明-CSDN博客

直接看上述链接

句柄还看下述《3》

  • henv -> Handle (句柄) to Environment
    • 这个句柄用于管理整个ODBC环境,例如设置ODBC版本(如SQL_OV_ODBC3)。
    • 通常也只需一个
  • hdbc -> Handle to Database Connection
    • 这个句柄代表应用程序与特定数据库之间的连接。
  • hstmt -> Handle to Statement(语句)
    • 这个句柄用于准备和执行SQL语句,以及处理结果集。
    • 可以有多个
1》ODBC连接 Mysql 或者 Oracle 数据库的代码区别?

2》extern能写在类定义内部作为成员变量

比如在Address_handle.h里面,还会通过ODBC执行SQL语句。

externstatic语义上完全冲突的两个关键字。

3》为什么ODBC的句柄要设置为全局变量?——为了复用连接、简化调用、避免重复创建

4》数据类型转换【自己的代码做了改进,删去了冗余的代码,且正确delete了,避免了内存泄漏】

下述链接六、数据类型

【ODBC】ODBC连接数据库详细说明-CSDN博客

5》执行一条SQL语句

6》执行两条SQL语句:先切换为同一个连接下的其它数据库,再执行传入的 sql 语句

【这个函数没用上,而且写得有问题,考虑不完全【自己已经改好】】

切换数据库的关键是——构造一个像 "USE your_database_name;" 这样的完整 SQL 语句字符串,然后用 SQLExecDirect 去执行它。

 五、初始化准备3:“缓冲区设置”【DataBuffer.h

二、的目的:获取初始界面InitFrame::OnConfirm函数传过来的配置参数config【如下图所有的初始化信息】。

这部分是实现二、的下图红框部分

  • 大小 (Size, 条):指缓冲区能容纳的最大数据条目数量。达到此上限时,可能需要丢弃旧数据或阻塞写入。
  • 存储阈值 (Threshold, 条):指触发缓冲区刷新(如写入磁盘、发送)所需积累的数据条目数量。达到此数量时,立即处理缓冲区内容。
  • 存储周期 (Storage Period, 秒):指缓冲区中数据的最长保留时间。超过这个时间的数据应该被“过期”或触发处理(如写入文件、发送网络)。

1、std::stoull

std::stoull:字面意思就是 "string to unsigned long long"(字符串转无符号长长整型)

2、函数的参数为什么是size_t 类型的?

1>size_t区别1、的unsigned long long

2>size_t

是一个无符号整数类型(通常是 unsigned intunsigned long),它被设计用来表示:

  • 对象的大小(例如 sizeof 的返回值)
  • 容器的大小(例如 std::vector::size()
  • 数组的索引
  • 内存相关的计数

它的核心语义是:“非负的、用于表示大小或数量的整数”

3>为什么 setProcessingThreshold 和 setMaxBufferSize 用 size_t 是合理的?

  • processingThreshold: 表示“多少条”数据触发存储。这是一个数量,必须是非负整数。size_t 完美匹配其语义。
  • maxBufferSize: 表示缓冲区能容纳的“最大条数”或“字节数”。这也是一个大小/容量size_t 非常合适。

4>师傅的代码有问题:为什么 setbufferTimed 用 size_t 是不合理的?

  • bufferTime: 表示“时间间隔(秒)”。
  • 问题1:精度丢失:时间间隔通常需要小数。例如,你可能希望轮询间隔是 0.5 秒、1.2 秒或 0.1 秒。size_t 只能存储整数,setbufferTimed(0.5) 会被截断为 0,导致轮询间隔为0秒,这几乎等同于忙等待(busy-waiting),会耗尽CPU资源,是严重的性能问题。
  • 问题2:语义不匹配:虽然时间间隔是一个“量”,但它本质上是一个物理量(时间),而不是一个“数量”或“大小”。size_t 的语义是“大小/数量”,而时间间隔的语义是“持续时间”。
  • 问题3:灵活性差:无法设置亚秒级(sub-second)的轮询间隔,这在需要高响应速度的系统中是致命的。

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

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

相关文章

快速入门HarmonyOS应用开发(一)

目录 前言 一、准备工作 二、实战开发 2.1、Navigation简介 2.2、页面路由开发 2.2.1、创建常量 2.2.2、创建字符串资源 2.2.3、创建float资源 2.2.4、创建color资源 2.2.5、创建数据实体 2.2.6、创建页面路由表 2.2.7、创建Navigation根容器 2.2.8、创建NavDesti…

AI 进课堂 - 语文教学流程重塑

AI 进课堂 - 语文教学流程重塑执教语文十余年&#xff0c;备课案头的参考书堆得比学生作业本还高&#xff0c;批改作文时红笔芯换得比粉笔还勤。 直到去年把 JBoltAI 请进课堂&#xff0c;那些重复机械的工作突然有了新解法&#xff0c;连课堂上孩子们的眼神都亮了许多 —— 这…

用户是否可以同时使用快照和备份来保护云服务器数据安全?

在云计算环境中&#xff0c;云服务器已成为企业和个人数据存储、应用部署和业务运营的重要平台。随着业务数据量的不断增长&#xff0c;数据安全和业务连续性成为用户关注的核心问题。云服务器提供的快照和备份功能为用户提供了有效的数据保护手段&#xff0c;但很多人会疑问&a…

RDS-MYSQL,这个RDS是什么?和mysql有什么区别?

好的&#xff0c;这是一个非常常见且重要的问题。我用最通俗易懂的方式给你解释清楚。 一、大白话解释 你可以把 MySQL 和 RDS MySQL 的关系&#xff0c;想象成&#xff1a;MySQL&#xff1a;就像是你自己买零件组装的一台电脑。 你需要自己挑选CPU、内存、硬盘、主板&#xff…

arcgis中实现四色/五色法制图

四色定理是图论中的一个著名定理&#xff0c;它指出在任何地图上&#xff0c;只需四种颜色就足以使任何相邻的区域&#xff08;拥有共同边界线段&#xff0c;而非单个点&#xff09;颜色不同。五色定理则是另一个更早被证明的、较弱但更易证的定理。在地图制图中&#xff0c;这…

Spring如何巧妙解决循环依赖问题

什么是循环依赖&#xff1f;循环依赖是指两个或多个Bean之间相互依赖&#xff0c;形成闭环的情况。例如&#xff1a;AService依赖BService&#xff0c;而BService又依赖AService。这种场景下&#xff0c;传统的创建顺序无法满足依赖注入的要求。Spring的三级缓存机制Spring通过…

CUDA 中Thrust exclusive_scan使用详解

1. 基本概念Thrust 是 NVIDIA CUDA 提供的类似 C STL 的并行算法库。Scan (前缀和)&#xff1a;给定数组 [a0, a1, a2, ...]&#xff0c;产生前缀和序列。Exclusive Scan (排他前缀和)&#xff1a; 输出位置 i 存放的是输入数组中 0 到 i-1 的累积结果。换句话说&#xff0c;结…

Linux -- 信号【上】

目录 一、信号的引入 1、信号概念 2、signal函数 普通标准信号详解表 3、前台/后台进程 3.1 概念 3.2 查看后台进程 3.3 后台进程拉回前台 3.4 终止后台进程 3.5 暂停前台进程 3.6 回复运行后台进程 4、发信号的本质 二、信号的产生 1、终端按键 2、系统调用 2…

Altium Designer(AD)自定义PCB外观颜色

目录 1视图设置界面介绍 2PCB阻焊层颜色设置 2.1进入视图设置界面 2.2阻焊层颜色设置 2.3顶层和底层阻焊层颜色设置 2.4顶层阻焊层试图效果 2.5底层阻焊层试图效果 3设置PCB丝印颜色设置 3.1找到丝印设置选项 3.2设置顶层和底层丝印颜色 3.3顶层丝印 3.4底层丝印 4…

5天改造,节能50%!冷能改造如何实现“不停产节能”?

你有没有发现一个现象&#xff1f;很多工厂老板一提到节能改造&#xff0c;第一反应就是摇头。不是不想省电费&#xff0c;而是怕停产。停产一天损失几十万&#xff0c;改造周期动辄几个月&#xff0c;这账怎么算都不划算。但如果我告诉你&#xff0c;有一种改造方式&#xff0…

【Flink】窗口

目录窗口窗口的概念窗口的分类滚动窗口&#xff08;Tumbling Windows&#xff09;滑动窗口&#xff08;Sliding Windows&#xff09;会话窗口&#xff08;Session Windows&#xff09;全局窗口&#xff08;Global Windows&#xff09;窗口API概览窗口函数增量聚合函数ReduceFun…

攻击路径(4):API安全风险导致敏感数据泄漏

本文是《攻防演练 | JS泄露到主机失陷[1]》的学习笔记&#xff0c;欢迎大家阅读原文。攻击路径通过未授权访问攻击获取敏感数据通过SQL注入攻击获取服务器权限通过凭据访问攻击获取数据库权限和敏感数据和应用权限安全风险与加固措施通过未授权访问攻击获取敏感数据、通过SQL注…

机器学习面试题:请介绍一下你理解的集成学习算法

集成学习&#xff08;Ensemble Learning&#xff09;的核心思想是“集思广益”&#xff0c;它通过构建并结合多个基学习器&#xff08;Base Learner&#xff09;来完成学习任务&#xff0c;从而获得比单一学习器更显著优越的泛化性能。俗话说&#xff0c;“三个臭皮匠&#xff…

Invalid bound statement (not found): com.XXX.XXx.service.xxx无法执行service

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.xxx.service.CitytownService.selectCitytown 出现无法加载sevice层的时候&#xff0c;如下图所示1&#xff0c;处理方法是&#xff0c;先看下注解MapperScan内的包地址&#xff0c…

泛型(Generics)what why when【前端TS】

我总是提醒自己一定要严谨严谨严谨 目录TypeScript 泛型 (Generics)1. 什么是泛型&#xff1f;2. 为什么需要泛型&#xff1f;3. 泛型常见用法3.1 函数泛型3.2 接口泛型3.3 类泛型3.4 泛型约束3.5 泛型默认值3.6 多个泛型参数4. 泛型应用场景TypeScript 泛型 (Generics) 1. 什…

分布式协议与算法实战-协议和算法篇

05丨Paxos算法&#xff08;一&#xff09;&#xff1a;如何在多个节点间确定某变量的值? 提到分布式算法&#xff0c;就不得不提 Paxos 算法&#xff0c;在过去几十年里&#xff0c;它基本上是分布式共识的代名词&#xff0c;因为当前最常用的一批共识算法都是基于它改进的。比…

9.13 9.15 JavaWeb(事务管理、AOP P172-P182)

事务管理事务概念事务是一组操作的集合&#xff0c;是一个不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败操作开启事务&#xff08;一组操作开始前&#xff0c;开启事务&#xff09;&#xff1a;start transaction / begin提交事务&#xff08;这…

检索融合方法- Distribution-Based Score Fusion (DBSF)

在信息检索&#xff08;IR&#xff09;、推荐系统和多模态检索中&#xff0c;我们常常需要融合来自多个检索器或模型的结果。不同检索器可能对同一文档打出的分数差异很大&#xff0c;如果直接简单加权&#xff0c;很容易出现某个检索器“主导融合结果”的情况。 Distribution…

Oracle体系结构-归档日志文件(Archive Log Files)

核心概念&#xff1a;什么是归档日志文件&#xff1f; 定义&#xff1a; 归档日志文件&#xff08;Archive Log Files&#xff09;是在线重做日志文件&#xff08;Online Redo Log Files&#xff09;在被覆盖之前的一个完整副本。它们由 Oracle 的后台进程 ARCn&#xff08;归档…

GoogLeNet实战:用PyTorch实现经典Inception模块

配套笔记&讲解视频&#xff0c;点击文末名片获取研究背景&#xff08;Background&#xff09; 1.1 领域现状&#xff08;大环境与挑战&#xff09; 想象一下&#xff0c;你和朋友们在看一大堆照片——猫、狗、汽车、蛋糕&#xff0c;大家要把每张照片贴上标签。几年前&…