C++ 應用軟件開發從入門到實戰詳解

目錄

1、引言

2、IDE 開發環境介紹

2.1、Visual Studio?

2.2、Qt Creator??

3、 C++語言特性

3.1、熟悉泛型編程

3.2、了解C/C++異常處理

3.3、熟練使用STL容器

3.4、熟悉C++11新特性

4、Windows 平臺的編程技術與調試技能

4.1、需要掌握的若干編程技術和基礎知識

4.2、需要掌握的軟件調試技能

5、開發 Windows 應用軟件需要具備的其他技能

6、客戶端 UI 編程技術

6.1、MFC 庫

6.2、duilib 庫

6.3、QT 庫

6.4、Chromium 開源瀏覽器的 UI 庫

6.5、Electron 界面框架

7、項目中常用的 C/C++ 開源庫介紹

8、Windows 平臺實用小工具介紹

8.1、代碼編輯器 VSCode

8.2、代碼查看編輯器 Source Insight

8.3、文本編輯器 Notepad++

8.4、文件搜索工具 Everything

9、最后


C++軟件異常排查從入門到精通系列教程(專欄文章列表,歡迎訂閱,持續更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++基礎與進階(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_11931267.htmlVC++常用功能開發匯總(專欄文章列表,歡迎訂閱,持續更新...)https://blog.csdn.net/chenlycly/article/details/124272585Windows C++ 軟件開發從入門到實戰(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_12695902.htmlC++軟件分析工具從入門到精通案例集錦(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/article/details/131405795開源組件及數據庫技術(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_12458859.html網絡編程與網絡問題分享(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_2276111.html? ? ? ?用C++開發軟件,主要包含兩大類,一類是工具軟件與客戶端軟件的開發,一類是服務器程序的開發(運行在Windows Server服務器上)。我們日常工作學習使用的都是Windows桌面系統,會頻繁地使用到各式各樣的工具與客戶端軟件。本文詳細介紹一下用C++開發應用軟件的諸多內容,以供大家借鑒或參考。

1、引言

? ? ? ?在Windows系統中,大多數客戶端軟件都是用C++開發的,當然也有少部分軟件是用C#等語言實現的。我們日常使用的Windows桌面版的QQ、微信、騰訊會議、企業微信、字節飛書、阿里釘釘、百度網盤、迅雷、Chrome瀏覽器、Foxmail郵箱、遠程軟件向日葵/ToDesk等客戶端軟件,都是用C++開發實現的,C++是當前Windows平臺開發應用軟件的主流開發語言。本文詳細介紹一下Windows平臺下用C++開發客戶端軟件的相關內容。

2、IDE 開發環境介紹

? ? ? ?Windows中常用的C/C++ IDE開發工具主要有微軟的Visual Studio和QT公司的QT Creator。當然也可以使用微軟的VSCode、JetBrains公司的CLion,甚至使用代碼編輯查看工具Source Insight(只能查看編輯,不能編譯)去開發代碼。這里我們重點介紹一下Visual Studio和QT Creator這兩個IDE。

2.1、Visual Studio?

? ? ? ?微軟的Visual Studio是Windows平臺上最強大的IDE軟件開發工具,支持開發C/C++、C#、F#、JavaScript、Python、TypeScript、Visual Basic、.NET等語言的應用程序。這里我們主要看C/C++應用程序的開發。

? ? ? ?Visual Studio有強大的代碼編輯與調試功能,發展到今天已經經理了多個版本的迭代。從經典的Visual Studio 6.0,到Visual Studio 2003、Visual Studio 2008、Visual Studio 2010、Visual Studio 2012、Visual Studio 2015,再到近幾年的Visual Studio 2017、Visual Studio 2019、Visual Studio 2022。

? ? ? ? 其中,Visual Studio 2010是比較經典的版本,這個版本比較穩定且使用流暢,很多公司都在用這個版本,但該版本距今已經有10多年了,很多開源的C/C++代碼已經不再支持。比如著名的WebRTC庫最低只支持到Visual Studio 2017,已經不再支持Visual Studio 2010了。很多公司為了使用新版本的開源庫,為保持庫與庫之間開發工具的統一,已經將Visual Studio的版本升級到2017及以上的版本了。

? ? ? ?新版本有新版本的優勢,新版本引入了很多新功能,比如Visual Studio 2019的16.9版本開始就引入了Google的內存檢測利器Address Sanitizer,這個工具非常強大,可以檢測最讓C/C++程序員頭疼的內存異常問題。

? ? ? ?Linux有專用的內存檢測工具Valgrind和Address Sanitizer,但Windows只有一些老舊的工具,對新版本的Visual Studio已經不再支持了,Visual Studio 2019引入了內存檢測利器Address Sanitizer是個很大的利好消息。

? ? ? ? AddressSanitizer是Google提供的一款面向C/C++語言的強大內存錯誤檢測工具,該工具原先只支持Linux,現在也可以在Windows上使用了。微軟在Visual Studio 2019的16.9版本們引入了強大的內存分析工具AddressSanitizer,在安裝Visual Studio 2019的16.9版本及以后的版本時,會默認安裝AddressSanitizer工具的:

? ? ? ? 對于如何在VS中如何使用AddressSanitizer內存分析工具,可以看一下微軟官方文章的詳細說明:

?在Visual Studio中使用AddressSanitizerhttps://docs.microsoft.com/zh-cn/cpp/sanitizers/asan?view=msvc-170?至于AddressSanitizer的詳細說明,可以參見google官方頁面:

https://github.com/google/sanitizers/wiki/AddressSanitizerhttps://github.com/google/sanitizers/wiki/AddressSanitizer? ? ? ?推薦大家使用Visual Studio 2019或者以上的版本,Visual Studio 2017不太好用,在使用過程中會時不時的卡頓,在調試大型程序時速度也很慢很卡,而Visual Studio 2019要好很多。

雖然從Visual Studio 2019的16.9版本開始支持AddressSanitizer,但據說支持的還不夠全面,感興趣的朋友可以去嘗試使用一下。

? ? ? ?此外,Visual Studio 2017之前的版本都是收費的,當然大家用的基本都是破解版的,從Visual Studio 2017開始,開始提供免費的社區版本(Commuity Version),我們使用社區版本就可以了,完全可以滿足需求的。下載安裝都比較方便,直接搜索,到官網下載社區版安裝就行了。

? ? ? ?基本上大多數Windows UI客戶端程序都是用Visual Studio開發編譯的使用C/C++開發的常用客戶端程序有騰訊會議、QQ、PC版微信、阿里釘釘、字節飛書等,他們都是用Visual Studio開發編譯的。

? ? ? ?此外,不同版本的Visual Studio,其對應的運行時庫是不同的,發布軟件包時需要將對應版本的C/C++運行時庫帶上。關于C/C++運行時庫及Windows通用運行時庫的詳細介紹,可以查看我之前寫的專題文章:

C/C++運行時庫和UCRT系統通用運行時庫總結及問題實例分享https://blog.csdn.net/chenlycly/article/details/139094024? ? ? ?之前根據多年的項目實踐,專門寫文章分享過Visual Studio的高效調試技巧與調試方法,文章鏈接如下:

? Visual Studio調試技巧與實用方法總結(實戰經驗分享)https://blog.csdn.net/chenlycly/article/details/124884225


? ? ? ?在這里,給大家重點推薦一下我的幾個熱門暢銷專欄,歡迎訂閱:(博客主頁還有其他專欄,可以去查看)

專欄1:該精品技術專欄的訂閱量已達到50000多個,專欄中包含大量項目實戰分析案例,有很強的實戰參考價值,廣受好評!專欄文章已經更新到200篇以上,持續更新中!歡迎訂閱!)

C++軟件調試與異常排查從入門到精通系列文章匯總https://blog.csdn.net/chenlycly/article/details/125529931

本專欄根據多年C++軟件異常排查的項目實踐,系統地總結了引發C++軟件異常的常見原因以及排查C++軟件異常的常用思路與方法,詳細講述了C++軟件的調試方法與手段,以圖文并茂的方式給出具體的項目問題實戰分析實例(很有實戰參考價值),帶領大家逐步掌握C++軟件調試與異常排查的相關技術,適合基礎進階和想做技術提升的相關C++開發人員!

考察一個開發人員的水平,一是看其編碼及設計能力,二是要看其軟件調試能力!所以軟件調試能力(排查軟件異常的能力)很重要,必須重視起來!能解決一般人解決不了的問題,既能提升個人能力及價值,也能體現對團隊及公司的貢獻!

專欄中的文章都是通過項目實戰總結出來的,包含大量項目問題實戰分析案例,有很強的實戰參考價值!專欄文章還在持續更新中,預計文章篇數能更新到200篇以上!

專欄2:(本專欄涵蓋了C++多方面的內容,是當前重點打造的專欄,訂閱量已達30000多個,專欄文章已經更新到500多篇,持續更新中!歡迎訂閱!)

C/C++實戰進階(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_11931267.html

以多年的開發實戰為基礎,總結并講解一些的C/C++基礎與項目實戰進階內容,以圖文并茂的方式對相關知識點進行詳細地展開與闡述!專欄涉及了C/C++領域多個方面的內容,包括C++基礎及編程要點(模版泛型編程、STL容器及算法函數的使用等)、數據結構與算法、C++11及以上新特性(不僅看開源代碼會用到,日常編碼中也會用到部分新特性,面試時也會涉及到)、常用C++開源庫的介紹與使用、代碼分享(調用系統API、使用開源庫)、常用編程技術(動態庫、多線程、多進程、數據庫及網絡編程等)、軟件UI編程(Win32/duilib/QT/MFC)、C++軟件調試技術(排查軟件異常的手段與方法、分析C++軟件異常的基礎知識、常用軟件分析工具使用、實戰問題分析案例等)、設計模式、網絡基礎知識與網絡問題分析進階內容等。

專欄3:??

C++常用軟件分析工具從入門到精通案例集錦匯總(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/article/details/131405795

常用的C++軟件輔助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本專欄詳細介紹如何使用這些工具去巧妙地分析和解決日常工作中遇到的問題,很有實戰參考價值!

專欄4:???

VC++常用功能開發匯總(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/article/details/124272585

將10多年C++開發實踐中常用的功能,以高質量的代碼展現出來。這些常用的高質量規范代碼,可以直接拿到項目中使用,能有效地解決軟件開發過程中遇到的問題。

專欄5:?(本專欄涵蓋了C++多方面的內容,是當前重點打造的專欄,專欄文章已經更新到300多篇,持續更新中!歡迎訂閱!)

C++ 軟件開發從入門到實戰(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_12695902.html

根據多年C++軟件開發實踐,詳細地總結了C/C++軟件開發相關技術實現細節,分享了大量的實戰案例,很有實戰參考價值。

2.2、Qt Creator??

? ? ? ?Qt Creator是Qt為應用程序開發人員提供的一個跨平臺集成開發環境,可運行于Windows、Linux和MacOS操作系統(?Qt Creator是跨平臺的)。使用Qt Creator開發的應用程序可以部署到電腦、嵌入式、移動操作系統或Web瀏覽器中。

在功能方面,Qt Creator 包括項目生成向導、高級的 C++ 代碼編輯器、瀏覽文件及類的工具、集成了 Qt Designer、圖形化的 GDB 調試前端,集成 qmake 構建工具等。開發基于QT界面庫的C/C++應用程序時,我們一般都用QT Creator來開發。因為QT界面庫是跨平臺的,所以如果要開發一套既支持Windows系統有支持Linux系統的桌面應用軟件,一般會選擇使用QT界面庫,會使用QT Creator開發環境去開發。

? ? ? ?Linux主要是用作服務器系統的,為什么還要支持Linux系統呢?因為現在國家正在推行國產化進程,實現國產化替代,會使用到麒麟、UOS和深度DeepIn等國產化桌面操作系統,這些系統都是基于開源的Linux系統開發而來的(本質上都屬于Linux系統)。很多軟件需要支持國產化操作系統(推出支持國產化系統的軟件版本),后面支持Linux的應用程序也會越來越多了。

? ? ? ?比如視頻監控頭部廠商海康威視和大華的客戶端軟件,為了既支持Windows也支持Linux,均選擇了QT進行開發。隨著國產化進程的持續推進,國產化操作系統的逐步普及,支持函國產化系統的軟件會越來越多,QT也會變得越來越受歡迎,QT開發技術開始變得火熱起來。各大招聘網站上關于QT開發的崗位也越來越多了。

3、 C++語言特性

? ? ? ?做C/C++開發,首先要掌握C/C++語言基礎,基礎部分的內容這里就不贅述了,這里重點講講一些常用的或者較新的C++語言特性。

3.1、熟悉泛型編程

? ? ? ?要熟悉泛型編程,即熟悉模板函數和模板類,在實際項目中很多時候會用到,C++標準庫中的大多數類都是用模板實現的(比如STL容器類)。

3.2、了解C/C++異常處理

? ? ? ?需要了解C語言SEH結構化異常捕獲__try...__except,也要會用C++的try...catch去捕獲異常,特別是在使用COM組件時需要使用到try...catch,防止使用COM組件時出現異常,導致程序發生崩潰閃退。可以捕獲到代碼或函數中異常,只是當前功能不能正常的完成,但不會因為異常引發程序發生崩潰。

? ? ? ?關于使用_try...__except和try...catch的實例,可以查看我的文章:

使用__try...__except和try...catch捕獲異常實例分享(附源碼)https://blog.csdn.net/chenlycly/article/details/125331752

3.3、熟練使用STL容器

? ? ? ?C++標準庫給我們提供的STL容器及相關的算法函數,給我們編程帶來了很大的便利。常用的STL容器有vector、list、map、set等,有了這些STL容器,我們基本不用去設計各種復雜的數據結構,這些STL容器可能就能很好地滿足我們的需求。

? ? ? ?使用STL庫提供的算法函數去高效快速地操作STL列表中的數據,比如搜索容器中滿足條件的數據,對容器中的數據進行排序等。常見的算法函數有sort、count_if、find_if、remove_copy_if等,使用這些算法函數比我們直接去遍歷STL容器,速度要快很多的,我們在項目中多次用到。之前也寫了相關的文章,感興趣的話,可以去查看:

如何使用C++ STL標準模板庫中的算法函數(附源碼)https://blog.csdn.net/chenlycly/article/details/139591764使用STL算法函數有效提升STL列表的搜索速度(附源碼)https://blog.csdn.net/chenlycly/article/details/139591809

3.4、熟悉C++11新特性

? ? ? ?C++11新特性很重要,作為C++開發人員很有必要去了解去學習,不僅筆試面試時會涉及到(大部分C++招聘崗位在面試時都會問到C++11的新特性),而且開源代碼中也在大規模的使用。

? ? ? ?以很多視頻會議及直播軟件都在使用的開源WebRTC項目為例,WebRTC代碼中大篇幅地使用了C++11及以上的新特性,要讀懂其源碼,必須要了解這些C++的新特性。此外在日常項目代碼中,也會用到一些C++11的新特性,比如一些常用的關鍵字(比如auto、override、final、nullptr、=delete等)、lamda表達式(匿名函數)、智能指針(unique_ptr、shared_ptr和weak_ptr)等。之前我也寫了C++11新特性的文章,感興趣也可以去看一下:

C++11中的智能指針unique_ptr、shared_ptr和weak_ptr詳解https://blog.csdn.net/chenlycly/article/details/130918547C++11 新特性 ① | C++11 常用關鍵字實戰詳解https://blog.csdn.net/chenlycly/article/details/132701306C++11 新特性 ② | 左值、左值引用、右值與右值引用https://blog.csdn.net/chenlycly/article/details/132746812C++11 新特性 ③ | 可變參數模板介紹https://blog.csdn.net/chenlycly/article/details/132768378C++11 新特性 ④ | 模板類 std::function 和標準庫函數 std::bindhttps://blog.csdn.net/chenlycly/article/details/132774379C++11 新特性 ⑤ | 仿函數與 lambda 表達式https://blog.csdn.net/chenlycly/article/details/132776343? ? ? ?當然我們可能還需要了解C++14、C++17,甚至是C++20的新特性,特別是在閱讀開源代碼時可能會涉及到,開源代碼特別熱衷于使用這些新特性。

這些C++新特性,可以讓代碼更簡潔、更高效,但也讓C++變得更加臃腫復雜,更難于駕馭!

4、Windows 平臺的編程技術與調試技能

? ? ? ? 作為Windows C++應用軟件開發人員,需要掌握動態庫編程、Socket網絡編程、多線程編程、數據庫編程等主要編程技術。此外,還要掌握一些C++軟件調試與異常排查的技能,去高效快速地排查軟件運行運行過程中遇到的各種問題。

4.1、需要掌握的若干編程技術和基礎知識

? ? ? ?做Windows C++應用軟件開發,主要會涉及到兩大塊,一個是業務開發,一個UI界面編程,這里面會涉及到多方面的編程技術,這些編程技術在日常的項目中可能會用到。比如動態鏈接庫編程、數據庫編程、Socket網絡編程、多線程編程(多線程創建及多線程間的通信)、多進程編程(進程間的通信)、UI界面編程等。其中,UI界面編程需要熟悉常見的UI界面庫,比如微軟的MFC庫、開源的duilib庫、跨平臺的QT庫、Chromium UI界面庫等。一般根據項目的需要,掌握一到兩個界面庫就可以了,后面會對這些界面庫做個大概的介紹。

? ? ? ?另外,還要掌握一些常用的設計模式,比如單例模式、工廠模式、觀察者模式等。還要學習和熟悉一些常用的C/C++開源庫的使用,比如jsoncpp、TinyXML、libcurl、sqlite、duilib、libwebsockets、sdl、muduo、boost等。

? ? ? ?此外,現在的軟件系統都是基于網絡的,通信數據需要經過網絡傳輸,所以還需要掌握一些基礎的網絡知識,可以抓包分析多種網絡故障和網絡數據通信的異常。在和Linux服務器通信和調試業務時,可能需要通過Linux命令去查看服務器及服務器程序的運行狀態,所以可能需要掌握一些常用的Linux命令。

? ? ? ?關于網絡基礎知識及網絡問題排查實戰,可以查看我的文章:
【網絡入門】詳解常用的基礎網絡知識(面試筆試常考內容)https://blog.csdn.net/chenlycly/article/details/124433936【網絡進階】網絡問題排查實例集錦(實戰經驗分享)https://blog.csdn.net/chenlycly/article/details/124643918? ? ? ?對于C/C++開發的入門者,可以查看我之前寫的《C/C++學習路線》

C/C++學習路線總結與分享https://blog.csdn.net/chenlycly/article/details/127191075

4.2、需要掌握的軟件調試技能

? ? ? ?考察一個開發人員的水平,一方面要看其編碼與設計能力,另一方面要看其軟件調試能力(排查軟件異常的技能)。所以,軟件調試能力也非常重要,作為一個合格的進階開發人員,系統地掌握C++軟件調試技能去高效地處理各種軟件異常問題很有必要!

? ? ? ?首先要熟練使用IDE開發工具,掌握IDE工具的常用調試技巧與方法。對于Visual Studio的常用調試方法與技能,可以查看我的文章:

Visual Studio調試技巧與實用方法總結(實戰經驗分享)https://blog.csdn.net/chenlycly/article/details/124884225? ? ? ?然后要系統地掌握C++軟件調試與異常排查的技能比如要了解引發C++軟件異常的常見原因,要掌握排查C++軟件異常的常用方法。要熟練使用多個軟件工具去分析排查各種軟件問題,比如SPY++(查看窗口屬性)、Dpendency Walker(查看模塊的依賴關系)、GDIView(排查GDI對象泄露)、Process Explorer(排查高CPU占用等)、Process Monitor(監測文件活動和注冊表活動)、API Minitor(監測程序對API函數的調用)、Windbg調試器(分析軟件異常卡死或崩潰:靜態分析dump文件和動態調試目標進程)、IDA反匯編工具(查看二進制文件的匯編代碼)等。可以通過項目實戰分析案例去學習軟件調試與異常排查所涉及到的具體知識點與細節,并把這些技能積極主動地應用到項目實戰中去。

? ? ? ?對于引發C++軟件異常的常見原因,我之前根據項目實戰做過詳細的總結,可以查看文章:

引發C++軟件異常的常見原因分析與總結(實戰經驗分享)https://blog.csdn.net/chenlycly/article/details/124996473? ? ? 對于排查C++軟件異常的常用方法,我之前根據項目實戰也做過詳細的總結,可以查看文章:

排查C++軟件異常的常見思路與方法(實戰經驗總結)https://blog.csdn.net/chenlycly/article/details/120629327? ? ? ?通過線上溝通交流及對身邊同事的觀察發現,很多C++開發人員在軟件調試及異常排查方面都比較欠缺,甚至有時會直接影響工作效率和項目進度!為了解決這一普遍存在的痛點問題,推出了一套成體系的《C++軟件調試與異常排查從入門到精通》精品技術專欄!專欄中的內容均來自項目實戰,是實戰經驗總結,有很強的實戰參考價值!歡迎大家訂閱該精品專欄!

C++軟件調試與異常排查從入門到精通系列文章匯總https://blog.csdn.net/chenlycly/article/details/125529931

本專欄根據多年C++軟件異常排查的項目實踐,系統地總結了引發C++軟件異常的常見原因以及排查C++軟件異常的常用思路與方法,詳細講述了C++軟件的調試方法與手段,以圖文并茂的方式給出具體的項目問題實戰分析實例(很有實戰參考價值),帶領大家逐步掌握C++軟件調試與異常排查的相關技術,適合基礎進階和想做技術提升的相關C++開發人員!考察一個開發人員的水平,一是看其編碼及設計能力,二是要看其軟件調試能力!所以軟件調試能力(排查軟件異常的能力)很重要,必須重視起來!能解決一般人解決不了的問題,既能提升個人能力及價值,也能體現對團隊及公司的貢獻!專欄中的文章都是通過項目實戰總結出來的,包含大量項目問題實戰分析案例,有很強的實戰參考價值!專欄文章還在持續更新中,預計文章篇數能更新到200篇以上!

該精品技術專欄的訂閱量已達到450多個,專欄中包含大量項目實戰分析案例,有很強的實戰參考價值,廣受好評!專欄文章持續更新中,預計更新到200篇以上!歡迎訂閱!

5、開發 Windows 應用軟件需要具備的其他技能

? ? ? ? 在Windows平臺上開發應用軟件,除了上面講到的編程及調試技能之外,我們還需要了解Windows窗口特性與窗口編程(了解Windows窗口風格、窗口消息機制以及窗口繪制機制)、了解Windows系統及特性(了解exe程序的啟動過程、Windows文件系統和Windows特性)、了解字符編碼(比如Unicode、ANSI和utf8等)、熟悉IDE開發工具的各種工程屬性配置熟悉常用的Windows API函數學會使用多個軟件工具去分析各種軟件問題(比如SPY++、Dpendency Walker、Process Explorer、Process Monitor、Windbg等)等,具體說明如下所示:

1)要了解并會操作Windows窗口:比如窗口的創建與顯示、窗口的Z序、窗口的最大化與最小化顯示、窗口的前置與置頂、修改窗口風格(Style)、父子窗口及兄弟窗口的關系、獲取窗口的信息、通過信息查找窗口等。
2)要了解窗口的消息機制:熟悉常見的Windows標準窗口消息,可以給窗口發送消息,需要時可以攔截窗口的消息。
3)要了解窗口的繪制機制:要會使用GDI和GDI+加載圖片、繪制窗口,這里面會涉及到雙緩沖繪圖。

4)了解常用窗口的創建與常用控件的使用:了解對話框、菜單、工具欄和狀態欄的創建與使用,了解Button按鈕、Edit編輯框、ComboBox組合框、Text文本框、list列表、Progress進度條等常用控件的使用。
5)要了解IDE中工程屬性的配置:通過對屬性的配置實現對主程序或模塊的編譯選項控制。
6)要了解常見的字符編碼:比如ANSI編碼、UNICODE編碼、UTF8編碼、中文GBK編碼,以及這些字符編碼之間的轉換。在支持多語言的時候肯定會涉及到,一般UI界面的字符串使用UNICODE編碼,和服務器通信的數據中的字符串使用UTF8編碼。
7)要了解Windows exe程序的啟動過程:便于分析軟件啟動過程中遇到的各種異常問題。
8)要了解Windows文件系統和系統特性:比如系統路徑和常見應用程序路徑、UAC權限(管理員權限與標準用戶權限等)、常見第三方軟件的注入行為等。
9)要熟悉Windows常用API函數:學會使用API函數去實現諸多的功能。要學會使用微軟MSDN,到MSDN上去查看API函數的詳細說明,比如API函數的參數說明、使用注意細節以及API函數示例代碼等。
10)要熟練使用多個軟件工具去分析排查各種軟件問題:比如SPY++(查看窗口屬性)、Dpendency Walker(查看模塊的依賴關系)、GDIView(排查GDI對象泄露)、Process Explorer(排查高CPU占用等)、Process Monitor(監測文件活動和注冊表活動)、API Minitor(監測程序對API函數的調用)、Windbg調試器(分析軟件異常卡死或崩潰:靜態分析dump文件和動態調試目標進程)、IDA反匯編工具(查看二進制文件的匯編代碼)等。

借助這些分析工具,可以高效排查和解決項目中遇到的問題。對于非崩潰問題,可以嘗試使用上述小工具分析;對于崩潰問題,則使用Windbg調試器分析。有包含異常上下文信息的dump文件,則用Windbg靜態分析;沒有dump文件的,則用Windbg調試目標進程。
關于這些常用工具的詳細介紹,可以查看我之前寫的兩篇文章:

C++軟件開發值得推薦的十大高效軟件分析工具https://blog.csdn.net/chenlycly/article/details/135431130C++ 軟件常用分析工具及項目實戰問題分析案例集錦https://blog.csdn.net/chenlycly/article/details/135431130

? ? ? ?上述要點中的技能,是需要通過不斷的編碼調試實踐獲取的,不是一蹴而就的,是一個不斷實踐、不斷積累的過程。

作為一名軟件開發人員,應當通過實踐和學習,不斷提升自己的技術水平,以適應不斷變化的技術環境和項目需求。?

6、客戶端 UI 編程技術

? ? ? ?客戶端軟件一方面要將業務數據加載到UI界面上展現出來,另一方面要提供業務操作的入口,所以客戶端軟件在實現時主要包含UI界面開發和軟件業務開發兩大塊。不同公司的產品業務會有很大的不同,此處我們不討論具體的業務,只討論比較共性的UI編程技術。軟件UI界面編程,就是根據軟件的需求和UI設計師的UI設計效果去實現軟件的UI界面,并將業務數據展現在UI界面上,這一實現過程中需要用到一些常用的UI界面庫。

? ? ? ?常用的C++ UI界面庫主要有Visual Studio自帶的MFC界面庫基于directui思想的開源duilib界面庫支持跨平臺的QT界面庫以及Chromium瀏覽器的UI界面庫,當然還有一些收費的界面庫,收費的界面庫不在本文的討論之列。其中,MFC庫和duilib庫是基于Windows窗口設計的,只能用于Windows C++客戶端軟件的開發;QT是跨平臺的,既能用于Windnows客戶端開發,也能用于Linux客戶端的開發。Windows上C++軟件的開發主要使用Visual Studio開發環境,如果用到QT,一般使用專用的QT Creator開發環境。

? ? ? ?此外,最近幾年逐漸火起來的開源跨平臺應用程序開發框架ElectronFlutter,也受到了很多公司的青睞,在不少軟件中得到了應用。下面我們簡單介紹一下Electron框架的內容,至于Flutter框架,屬于移動開發領域的,已經超出我負責的范疇,在此就不做介紹了。

6.1、MFC 庫

? ? ? ?MFC是微軟的IDE開發環境Visual Studio自帶的界面庫,原生的MFC界面比較簡陋,界面效果很一般。MFC是個很古老的庫,雖然Visual Studio更新了很多代,但MFC庫始終維持在多年前的效果上,基本沒有做任何升級和改進。

? ? ? ?平時我們使用MFC庫去開發一些小的工具軟件,會很方便,通過簡單的可視化拖拽控件的操作,既可構建出軟件的界面,不需要額外的去做界面,直接使用MFC就完全能滿足要求。但對于一些商業軟件,原生的MFC庫是沒法滿足要求的,如果要用MFC開發軟件界面,則需要繼承MFC庫中的控件類,重寫這些控件類的方法去重繪界面并進行貼圖美化,但要實現比較酷炫的界面效果,使用MFC去實現就會很吃力了。

? ? ? ?對于MFC庫,還有個比較大的問題,每個控件都是一個窗口(比如Static文本控件、按鈕控件等),都需要單獨繪制處理,每個窗口都會占用一定數量的GDI對象。如果軟件中打開的窗口比較多,這個軟件占用GDI對象總數會比較多。特別是IM聊天軟件,每個聊天窗口會占用一兩百個GDI對象,在做極限測試時,打開幾十聊天窗口,這樣軟件進程占用的GDI對象總數就會接近或達到1萬上限,就會導致GDI繪圖出現異常,導致程序發生閃退。

? ? ? ?現在的商業軟件基本都不再使用MFC了,但有個行業除外。很多炒股類軟件的客戶端(比如大智慧客戶端軟件)還在用MFC庫,炒股軟件的界面主要來顯示股票數據,對界面的美化效果沒有大的要求,使用MFC庫做一些基本的美化即可。

6.2、duilib 庫

? ? ? ?duilib庫是基于directui思想實現的UI界面庫,相對于MFC,要靈活、好用很多,可以較容易地去實現一些酷炫的界面效果。很多知名的公司都在使用該庫,比如ZOOM視頻會議客戶端、PC版微信、愛奇藝PPS客戶端、京東咚咚客戶端、百度網盤客戶端、酷我音樂、酷狗音樂、華為PC版手機助手等。有些中小型公司也在使用該界面庫,比如2345公司的好壓等產品。

? ? ? ?很多公司在開源的duilib庫的基礎上,根據產品和項目的需要,對duilib庫進行了大量的改進和優化,并增加了一些新功能。網易和騰訊都開源了各自基于duilib改進而來的界面庫,原生的duilib我們使用過,但騰訊和網易的開源版本沒有研究過,不知道效果如何,不知道相對于原生的duilib都做了哪些改進。回頭有時間的時候可以去研究一下。

6.3、QT 庫

? ? ? ?QT是一套支持跨平臺的界面庫,既支持Windows平臺,也支持Linux平臺,甚至支持移動平臺。如果要開發Linux系統中的客戶端軟件,則需要使用QT界面庫。隨著國產化系統的推行與普及,很多軟件既要支持在Windows上運行,也要支持在國產化Linux桌面系統上運行。

? ? ? ?有些廠商為了實現對Windows和Linux雙平臺的支持,直接選擇使用QT界面庫開發客戶端軟件,而不再選擇Windows用Windows專用界面庫開發、Linux用QT開發的方式。比如視頻監控大型廠商海康威視和浙江大華,他們的視頻監控客戶端軟件都是直接采用QT界面庫開發的。很多做人工智能的公司都選擇QT進行應用軟件的開發。

? ? ? ?近年來在國產化大潮的推動下,QT的支持者和使用者越來越多,QT開發也變得越來越火,招聘市場上對QT開發人員的需求也越來越大,很多大公司的軟件也在選擇使用QT開發。QT當前的火爆場面,在幾年前是不曾有過的。

? ? ? ?關于QT界面庫的由來與發展,以及QT的詳細介紹,可以查看我的文章:

【 Qt 的“前世”與“今生”】Qt 的起源 | Qt 的發展歷程 | 為什么選擇 Qt | Qt 的授權模式 | Qt 版本選擇 | Qt Widgets和QML | Qt 程序發布https://blog.csdn.net/chenlycly/article/details/134769283

6.4、Chromium 開源瀏覽器的 UI 庫

? ? ? ?Chromium是Google的一個久負盛名的瀏覽器C++開源項目,它是Google的Chrome瀏覽器背后的引擎(幾乎包含了Chrome瀏覽器的所有實現代碼),其目的是為了創建一個安全、穩定和快速的通用瀏覽器。

? ? ? ?很多瀏覽器使用的都是Chromium開源內核,比如微軟Win10系統中推出的Edge瀏覽器拋棄了IE內核,轉而使用Chromium內核。國內知名的360瀏覽器、QQ瀏覽器、傲游瀏覽器,它們用的都是Chromium內核:

只是開發了各自的UI皮膚和界面,增加了一些額外的用戶功能。接下來說到的CEF嵌入式瀏覽器框架也是基于Chromium內核實現的。

? ? ? ?除了瀏覽器使用到了開源Chromium的內核,很多Windows應用軟件也使用到了Chromium中的內容,使用到了Chromium中的UI組件。比如字節的飛書客戶端、阿里的釘釘客戶端、華為的WeLink客戶端、網易云音樂與有道云筆記,均使用到了Chromium中的UI組件。

? ? ? ?那如何去判斷一個客戶端軟件是否使用了Chromium瀏覽器的UI組件了呢?其實很簡單,可以使用Visual Studio自帶的SPY++工具,去探測一下這些軟件的窗口屬性,如果窗口的標題和類名中看到了Chrome的字樣,就基本能確定軟件的界面就是用Chromium的UI組件開發的。比如下圖中的Chrome Legacy Window和Chrome_RenderWidgetHostHWND字符串:

6.5、Electron 界面框架

? ? ? ?Electron是一個由OpenJS基金會和活躍的貢獻者社區維護的開源項目。Electron 基于Node.js和Chromium,是一個使用 JavaScript、HTML 和 CSS 構建跨平臺桌面應用程序的框架,被Atom編輯器和許多其他應用程序使用。Electron 兼容 Mac、Windows 和 Linux,可以構建出三個平臺的應用程序。

? ? ? ?QQ今年發布基于全新的跨平臺解決方案QQNT架構,該架構主要采用了Electron 技術,QQ首次實現了Window、macOS、Linux多個系統平臺之間QQ架構的統一:

與此同時,QQ變得更穩定,更流程,更便于維護。關于 QQ NT 全新架構的更詳細說明,可以參考文章:

QQ 用 Electron 重構后,終實現 Linux、macOS、Windows 三端架構的統一!https://blog.csdn.net/csdnsevenn/article/details/131566192? ? ? ?之前聽說Electron框架很耗資源,比如會占用大量的內存資源,程序運行會變慢,總之Electron框架比較難駕馭,對技術要求比較高,開發控制成本比較高。字節跳動的飛書,幾年前使用的就是Electron框架,但后來又退回到Chromium開源UI框架。之前接入我們SDK的客戶,也在使用Electron開發客戶端軟件。因為我們沒使用過Electron,對Electron框架知之甚少,在此就不做深入的介紹了。

? ? ? 騰訊客戶端工程師對大家比較關注的一些Electron問題進行了解答

https://blog.csdn.net/techforward/article/details/128257109https://blog.csdn.net/techforward/article/details/128257109

大家印象中都覺得Electron會很笨重,很占資源。Electron框架,確實一般的公司很難駕馭的,騰訊應該做了深度優化和改進,特別是資源占用方面!

7、項目中常用的 C/C++ 開源庫介紹

? ? ? ? 在Windows C++應用軟件項目中,會使用到很多C++開源庫,比如:

1)處理json的jsoncpp庫(json串的構建與解析)。

2)處理xml的TinyXML庫(XML串的構建與解析)。

3)支持SMTP/HTTP/HTTPS等多協議網絡傳輸開源庫libcurl庫(使用SMTP協議發送郵件、使用HTTP/HTTPS發起HTTP請求)。

4)處理文件壓縮與解壓縮的zip.cpp和unzip.cpp(支持文件的壓縮與解壓)。

5)二維碼生成庫libqr(生成二維碼圖片)。

6)png圖片處理庫libpng(讀寫png圖片)。

7)圖片讀取解析庫stb_image(圖片讀取與解析)。

8)實現websocket通信的libwebsockets庫(客戶端與服務器之間進行websoket通信)。

9)輕量級開源數據庫SQLite(存放本地數據)。

10)多媒體處理開源庫FFmpeg(包含音視頻采集與編碼、音視頻解碼、視頻格式轉換、視頻抓圖、給視頻加水印等功能)。

11)實時音視頻處理開源庫WebRTC(包含音視頻采集、編碼、網絡傳輸,解碼顯示等)。12)Chromium嵌入式框架開源庫CEF(嵌入瀏覽器控件)。

13)跨平臺多媒體開發庫SDL庫(音視頻采集、編碼、解碼顯示等)。

14)數據實時壓縮解壓庫zlib(對字節流數據進行實時的壓縮與解壓縮)。

15)異常捕獲庫CrashRpt/CrashPad(捕獲軟件運行過程中的異常)。

16)開源操作系統ReactOS(查看系統源碼,可作為Windows系統代碼實現的參考,有時能可以通過查看系統函數的實現去輔助解決問題)。

17)網絡通信庫boostmuduolibevent等。


? ? ? ?在這里,給大家重點推薦一下我的幾個熱門暢銷專欄,歡迎訂閱:(博客主頁還有其他專欄,可以去查看)

專欄1:該精品技術專欄的訂閱量已達到580多個,專欄中包含大量項目實戰分析案例,有很強的實戰參考價值,廣受好評!專欄文章已經更新到200篇以上,持續更新中!歡迎訂閱!)

C++軟件調試與異常排查從入門到精通系列文章匯總https://blog.csdn.net/chenlycly/article/details/125529931

本專欄根據多年C++軟件異常排查的項目實踐,系統地總結了引發C++軟件異常的常見原因以及排查C++軟件異常的常用思路與方法,詳細講述了C++軟件的調試方法與手段,以圖文并茂的方式給出具體的項目問題實戰分析實例(很有實戰參考價值),帶領大家逐步掌握C++軟件調試與異常排查的相關技術,適合基礎進階和想做技術提升的相關C++開發人員!

考察一個開發人員的水平,一是看其編碼及設計能力,二是要看其軟件調試能力!所以軟件調試能力(排查軟件異常的能力)很重要,必須重視起來!能解決一般人解決不了的問題,既能提升個人能力及價值,也能體現對團隊及公司的貢獻!

專欄中的文章都是通過項目實戰總結出來的,包含大量項目問題實戰分析案例,有很強的實戰參考價值!專欄文章還在持續更新中,預計文章篇數能更新到200篇以上!

專欄2:(本專欄涵蓋了C++多方面的內容,是當前重點打造的專欄,訂閱量已達220多個,專欄文章已經更新到480多篇,持續更新中!歡迎訂閱!)

C/C++實戰進階(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_11931267.html

以多年的開發實戰為基礎,總結并講解一些的C/C++基礎與項目實戰進階內容,以圖文并茂的方式對相關知識點進行詳細地展開與闡述!專欄涉及了C/C++領域多個方面的內容,包括C++基礎及編程要點(模版泛型編程、STL容器及算法函數的使用等)、數據結構與算法、C++11及以上新特性(不僅看開源代碼會用到,日常編碼中也會用到部分新特性,面試時也會涉及到)、常用C++開源庫的介紹與使用、代碼分享(調用系統API、使用開源庫)、常用編程技術(動態庫、多線程、多進程、數據庫及網絡編程等)、軟件UI編程(Win32/duilib/QT/MFC)、C++軟件調試技術(排查軟件異常的手段與方法、分析C++軟件異常的基礎知識、常用軟件分析工具使用、實戰問題分析案例等)、設計模式、網絡基礎知識與網絡問題分析進階內容等。

專欄3:??

C++常用軟件分析工具從入門到精通案例集錦匯總(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/article/details/131405795

常用的C++軟件輔助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本專欄詳細介紹如何使用這些工具去巧妙地分析和解決日常工作中遇到的問題,很有實戰參考價值!

專欄4:???

VC++常用功能開發匯總(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/article/details/124272585

將10多年C++開發實踐中常用的功能,以高質量的代碼展現出來。這些常用的高質量規范代碼,可以直接拿到項目中使用,能有效地解決軟件開發過程中遇到的問題。

專欄5:?(本專欄涵蓋了C++多方面的內容,是當前重點打造的專欄,專欄文章已經更新到250多篇,持續更新中!歡迎訂閱!)

C++ 軟件開發從入門到實戰(專欄文章,持續更新中...)https://blog.csdn.net/chenlycly/category_12695902.html

根據多年C++軟件開發實踐,詳細地總結了C/C++軟件開發相關技術實現細節,分享了大量的實戰案例,很有實戰參考價值。


8、Windows 平臺實用小工具介紹

? ? ? ?對于代碼查看編輯工具,除了重量級的IDE開發工具之外,還可以使用微軟的VSCode和Source Dynamics公司的Source Insight。此外,在日常工作中推薦大家使用Notepad++和Everything這兩個輕量級的實用工具,使用起來非常方便、高效。

8.1、代碼編輯器 VSCode

? ? ? ?Visual Studio Code,簡稱VSCode是Microsoft在2015年4月30日Build開發者大會上正式宣布一個運行于 Mac OS X、Windows和 Linux 之上的,針對于編寫現代Web和云應用的跨平臺代碼編輯器。它具有對JavaScript,TypeScript和Node.js的內置支持,并具有豐富的其他語言(例如C++,C#,Java,Python,PHP,Go)和運行時(例如.NET和Unity)擴展的生態系統。

? ? ? ?該編輯器也集成了所有一款現代編輯器所應該具備的特性,包括語法高亮(syntax hight lighting),可定制的熱鍵綁定(customizable keyboard bindings),括號匹配(bracket matching)以及代碼片段收集(snippets)。還會擁有對 Git 的開箱即用的支持。

? ? ? ?VS Code將代碼編輯器的簡單性與開發人員對其核心 edit - build - debug 周期所需的功能結合在一起。它提供了全面的代碼編輯、導航和理解支持、以及輕量級調試,豐富的可擴展性模型以及與現有工具的輕量級集成。此外,微軟在大力推廣VS Code,其更新的頻率很快,每月更新一次,其中包含新功能和錯誤修復。

? ? ? ?嚴格意義上講,VS Code只是個代碼查看和編輯工具,本身不提供編譯器,沒法對代碼進行編譯。如果要編譯代碼,則需要安裝相關的插件。

8.2、代碼查看編輯器 Source Insight

? ? ? Source Insight是一個面向項目開發的輕量級程序編輯器和代碼瀏覽器,它擁有內置的對C/C++、C#和Java等程序的分析。能分析代碼并在工作的同時動態維護它自己的符號數據庫,并自動顯示有用的上下文信息。Source Insight提供了最快速的對代碼的導航和任何程序編輯器的源信息。

? ? ? ?Source Insight是個小巧輕便的工具,可以快速啟動,實用過程中占用很少的資源(CPU和內存資源),可以快速地瀏覽和編輯代碼,和大型臃腫的IDE軟件相比,這些都是很大的優勢。作為一個編輯器,是沒有編譯代碼的功能的。

? ? ? ?在查看學習大型開源庫代碼時,強烈建議大家使用Source Insight,比如大型開源項目WebRtc和Chromium。這些大型代碼的大小就占到了數個GB以上,且很多這種大型的開源庫都是通過交叉編譯工具編譯的,并沒有提供Visual Studio工程文件,不好使用Visual Studio去查看代碼。這時正好可以使用Source Insight,只要在Source Insight創建一個工程,將開源代碼的根目錄指定到工程中即可。

? ? ? ?關于如何使用Source Insight工具,如何創建Source Insight工程,可以查看我之前寫的一篇文章:

使用Source Insight查看編輯代碼https://blog.csdn.net/chenlycly/article/details/124347857

8.3、文本編輯器 Notepad++

? ? ? ?Notepad++是程序員必備的文本編輯器,該軟件軟件功能非常強大,界面簡潔明晰、操作方便快捷,設計得很人性化。Notepad++支持C、C++、Java、C#、XML、HTML、PHP、JS等27種編程語言。該工具比Windows系統自帶的記事本(Notepad.exe)要強大太多,可完美地取代Windows系統的記事本。

? ? ? ?可以使用Notepad++查看代碼,它支持語法高亮顯示。Notepad++支持多標簽頁,可以同時打開多個文件。我們經常使用Notepad++查看日志文件,支持在文件中搜索,可以對匹配到的關鍵字的次數進行計數,并將搜到的記錄顯示出來,可以切換查看,這對查看軟件運行日志非常方便。還可以使用Notepad++記錄文本內容,該工具啟動快使用便捷,這是其一大優勢。這是我們日常開發工作中用的最多的軟件之一。

8.4、文件搜索工具 Everything

? ? ? ?Everything是voidtools開發的一款文件搜索工具,它體積小巧,啟動迅速,界面簡潔易用。搜索文件時快速建立索引,快速搜索,同時占用極低的系統資源,還能實時跟蹤文件變化。其搜索速度比Windows自帶的搜索要快得多。

? ? ? ?使用該工具在搜索磁盤上的文件或文檔時,不是一般的好用,搜索速度真的非常快,強烈推薦大家使用。 ?

9、最后

? ? ? ?本文概括性地介紹了Windows C++ 應用軟件開發相關的內容,希望能給Windows C++開發人員,特別是入門級的新人,提供一些借鑒或參考。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87771.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲實戰:研究slug相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網技術的快速發展,網絡上的信息量呈爆炸式增長。如何從海量的非結構化數據中提取有價值的信息,成為當前數據科學領域的重要研究方向。網絡爬蟲作為一種自動化數據采集工具,可以高效地獲取網頁內容,為數據分析提供豐富的數據來源。 Sl…

人工智能-基礎篇-18-什么是RAG(檢索增強生成:知識庫+向量化技術+大語言模型LLM整合的技術框架)

RAG(Retrieval-Augmented Generation,檢索增強生成)是一種結合外部知識檢索與大語言模型(LLM)生成能力的技術框架,旨在提升生成式AI在問答、內容創作等任務中的準確性、實時性和領域適應性。 1、核心概念 …

CppCon 2018 學習:What do you mean “thread-safe“

什么是“線程安全”? “線程安全”指的是一個函數、方法或代碼塊能夠在多個線程同時執行時,不會出現意外的交互或破壞共享數據,能夠安全地運行。 POSIX 對線程安全的定義很清楚: “一個線程安全的函數可以在多個線程中被安全地并…

熱方程初邊值問題解法

已知公式: u ( x , t ) ∫ ? ∞ ∞ G ( x , y , t ) g ( y ) d y . u(x,t)\int_{-\infty}^{\infty}G(x,y,t)g(y)dy. u(x,t)∫?∞∞?G(x,y,t)g(y)dy. (1) 其中 G ( x , y , t ) 1 2 k π t e ? ( x ? y ) 2 4 k t G(x,y,t)\frac{1}{2…

怎樣理解:source ~/.bash_profile

場景復現 $ source ~/.bash_profileAnalysis 分析 一句話概括 source ~/.bash_profile “在 當前 終端會話里,立刻執行并加載 ~/.bash_profile 中的所有命令,讓其中定義的環境變量、函數、alias 等即時生效,而無需重新登錄或開新 Shell。…

搜索問答技術概述:基于知識圖譜與MRC的創新應用

目錄 一、問答系統應用分析 二、搜索問答技術與系統 (一)需求和信息分析 問答需求類型 多樣的數據源 文本組織形態 (二)主要問答技術介紹 發展和成熟度分析 重點問答技術基礎:KBQA和DeepQA KBQA(…

TCP數據的發送和接收

本篇文章結合實驗對 TCP 數據傳輸中的重傳機制、滑動窗口以及擁塞控制做簡要的分析學習。 重傳 實驗環境 這里使用兩臺騰訊云服務器:vm-1(172.19.0.3)和vm-2(172.19.0.6)。 超時重傳 首先 vm-1 作為服務端啟動 nc…

python 保存二維數組到本地

Python中保存二維數組有多種方法,以下是常用的幾種方式:1. 使用NumPy(推薦)import numpy as np# 創建二維數組 arr np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 保存為.npy文件(NumPy專用格式) np.save…

LIN總線通訊中從節點波特率同步原理

波特率同步原理:從節點如何通過0x55校準時鐘? 一、同步場的核心作用:統一“時間標尺” 在LIN總線中,主節點與從節點各自擁有獨立的時鐘源(如MCU內部RC振蕩器),但由于制造工藝差異,…

【Unity筆記02】訂閱事件-自動開門

流程 當玩家移動到觸發區域的時候,門自動打開 事件系統 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class EventSystem : MonoBehaviour {public static EventSystem Instance { get; private set; }…

控制臺字符動畫

旋轉的立方體 #include <cstdint> #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <ctime> #include <thread> using namespace std;float angleX .0f; float a…

基于 PyTorch 的貓狗圖像分類實戰

基于 PyTorch 的貓狗圖像分類實戰 項目背景簡介 深度學習框架 PyTorch 因其動態計算圖和靈活易用性&#xff0c;被廣泛應用于圖像分類等計算機視覺任務。在入門計算機視覺領域時&#xff0c;常常以手寫數字識別&#xff08;MNIST&#xff09;作為 “Hello World”&#xff0c…

SwiftUI 7(iOS 26 / iPadOS 26)中玻璃化標簽頁的全新玩法

&#x1f378; Liquid Glass 登場&#xff1a;界面設計煥然一新 WWDC25 可謂驚喜連連&#xff0c;其中最引人矚目的變革之一&#xff0c;莫過于蘋果推出的全新跨平臺設計語言 —— Liquid Glass&#xff08;液態玻璃&#xff09;。這一設計風格涵蓋了從按鈕到導航欄&#xff0…

PDF處理控件Spire.PDF教程:在Java中讀取PDF,提取文本、圖片和表格

在數據驅動的現代開發中&#xff0c;高效處理 PDF 文檔已成為 Java 開發者不可或缺的核心能力。無論是處理各類發票掃描件、業務分析報告&#xff0c;還是包含豐富圖表的技術文檔&#xff0c;掌握 Java 版的 PDF 解析技術都將大幅提升數據處理效率&#xff0c;充分釋放文檔中的…

跨平臺游戲引擎 Axmol-2.7.0 發布

Axmol 2.7.0 版本是一個以錯誤修復和功能改進為主的次要LTS長期支持版本 &#x1f64f;感謝所有貢獻者及財務贊助者&#xff1a;scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox 重大變更 Android Studio 最低版本要求升級至 2025.1.1…

XML 筆記

<image src"hue.gif" width"100" height"auto" align"left"/> <br/> 換行 在 XML 中&#xff0c;<![CDATA[ 和 ]]> 用于定義一個 CDATA 節&#xff08;Character Data Section&#xff09;。CDATA 節是用于將一段…

Python實現優雅的目錄結構打印工具

Python實現優雅的目錄結構打印工具 在軟件開發、系統管理和日常工作中&#xff0c;我們經常需要查看和分析目錄結構。 工具功能概述 這個DirectoryPrinter類提供了以下功能&#xff1a; 遞歸打印目錄結構可配置是否顯示隱藏文件可設置最大遞歸深度自定義縮進和文件/文件夾符…

【Python】文件打開:with open具體解析

示例 # 使用 with 語句打開文件并讀取內容 with open(pi.txt, r) as file_object:contents file_object.read()print(contents) # 文件在代碼塊結束后自動關閉with 解析 with 是 Python 中的上下文管理器語法&#xff0c;用于確保某個操作完成后自動執行清理操作。它常用于文…

Acrel-1000系列分布式光伏監控系統在湖北荊門一馬光彩大市場屋頂光伏發電項目中應用

摘 要&#xff1a;分布式光伏發電能夠對日益嚴重的環境壓力起到有效緩解作用,在當前對環境保護需求越來越大情況下,發電行業在發展中不但要提升發電效率,同時也需要降低成本。分布式光伏發電主要是利用風能和太陽能等可再生清潔能源進行發電,對于空氣質量具有改善效果,和傳統發…

CentOS-6與CentOS-7的網絡配置IP設置方式對比 筆記250706

CentOS-6與CentOS-7的網絡配置IP設置方式對比 筆記250706 1?? 參考 1 CentOS-6 與 CentOS-7 的網絡配置IP設置方式對比 CentOS 6 和 CentOS 7 在網絡配置上存在顯著差異&#xff0c;主要體現在配置文件結構、管理工具、服務機制和命令集等方面。以下是兩者的核心對比&#x…