OPC Client第10講:實現主界面;獲取初始界面傳來的所有配置信息config【C++讀寫Excel:xlnx;ODBC;緩沖區】

接前面代碼內容:

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;大家要把每張照片貼上標簽。幾年前&…