《Windows核心編程》:錯誤處理

来源:https://www.cnblogs.com/zengxiangchun/p/-/windows-error
-Advertisement-
Play Games

https://www.zhihu.com/people/xiangchun.zeng 網路流行的"科學的盡頭還是燒開水"這個梗,從發明蒸汽輪機以來,到現在的核電站、核動力航母最終都是通過“燒開水”這種能量轉換形式來實現發電和航行。一以貫之,那麼可以這麼講:“Windows核心編程的盡頭還是調函數” ...


https://www.zhihu.com/people/xiangchun.zeng

網路流行的"科學的盡頭還是燒開水"這個梗,從發明蒸汽輪機以來,到現在的核電站、核動力航母最終都是通過“燒開水”這種能量轉換形式來實現發電和航行。一以貫之,那麼可以這麼講:“Windows核心編程的盡頭還是調函數”。.NET、MFC、QT、GTK、AWTK等等這些框架最終都是通過“調函數”這種介面方式來實現Windows應用程式開發,只不過他們使用了面向對象思想和方法對Win32 API進行了封裝從而對客戶程式員隱藏了“調函數”這個動作。不要被這些高大上的名稱所迷惑,揭開他們神秘的面紗無非就是“調函數”。就好像沒有追到的那位女生,褪去“神秘面紗”其本質與其他女生沒有區別,就算追到了那又怎麼樣,一旦得到就生膩,剩下的就是痛苦和無聊(不是我說的,哲學老師說的)。還好沒有追到,不是說得不到的才是最好的嗎。Win32 API是構築Windows平臺的基石,微軟提供的MSDN Library文檔庫詳細解釋了Win32 API如何使用。 使用Win32 API實現一個簡單的對話框程式:(我離開校園進入企業實習面試的第1個題目就是這個)
// 偽代碼
// 應用程式主函數
INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, INT nCmdShow)
{
    // 1.設計一個視窗類
    WNDCLASSEX w;
    
    // 2.註冊這個視窗類
    RegisterClassEx(&w);
    
    // 3.創建視窗 
    CreateWindowEx();
    
    // 4.更新顯示視窗 
    ShowWindow();
    UpdateWindow();
    
    // 5.應用程式消息迴圈
    TranslateMessage();
    DispatchMessage();
    
    return 0;
}
 
// 應用程式消息處理回調函數
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    return 0;
}

同樣使用QT實現一個簡單的對話框程式,可見使用框架可以大大提高開發效率。

// 偽代碼
// 創建並顯示對話框
QDialog *myDlg = new QDialog();
myDlg->show();
以上引出了“調函數”這個概念,那麼一個大型程式可以簡單的看作成調用很多不同功能的函數來實現需求的集合。那麼調用函數成功與否,定位錯誤以及對錯誤的處理就顯得至關重要了,通過GetLastError函數可以獲取錯誤碼,通過FormatMessage函數可以將乾巴巴的錯誤碼轉換為世界各國程式員都能看懂的自然語言。在調用函數的過程中,傳入約定的有效的參數就一定執行成功並返回正確的結果,通過錯誤碼可以查詢到成功的原因;一旦執行失敗返回錯誤,通過錯誤碼可以查詢到明確的錯誤原因並及時修正錯誤。女生就不是這麼回事了,你把左臉伸過去她要扇你右臉,她說不要可能是要,究其原因,她惱怒的說你不懂她,女生就是這麼讓人捉摸不透,不可理喻。可見編程是多麼的確定及美好(這時候女生要說話了:跟你的程式過一輩子去吧!)。   所有的開發語言、開發框架都有一套異常、錯誤處理機制,一個聰明的、合格的程式員必然要學會使用這些機制巧妙的處理開發過程中碰到的各種問題。不然,程式不穩定、售後不開心、客戶不滿意、回款不及時、老闆就要炒你魷魚。那麼男女相處的過程中也要建立錯誤處理機制,不然,稍有不慎就一拍兩散、雞飛蛋打、滿盤皆輸。可見錯誤處理是多麼的重要。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用了好幾年Xfce桌面了,但是從來沒有仔細研究過Xfce底下相關的運行邏輯,最近才對相關的底層概念感興趣並去嘗試瞭解了一下,但是它的體系架構以及複雜的依賴關係令初來乍到者望而卻步。沒辦法,寫點什麼方便理解吧。 這一系列文章主要是探討Xfce底層實現的,不會過多聚焦於美化之類的話題。我的環境是Arch ...
  • 導讀:在這個快節奏的技術世界里,重溫過去並從中汲取靈感總是一件有趣的事情。今天要介紹的是一款僅用一天時間重製的經典 Macintosh 應用——Stapler。這款應用最初發佈於1992年,現在由一位充滿激情的開發者重新打造,不僅保留了原汁原味的功能,還加入了現代化的改進和特性,使其更適合現代 ma ...
  • 實踐環境 CentOS-7-x86_64-DVD-2009.iso rabbitmq-server-3.9.16-1.el7.noarch.rpm https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.9.16 https://git ...
  • 本章將和大家分享Linux系統中的進程和埠查看命令。 一、ps命令 Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程信息,就可以使用top命令。 1 ...
  • 本章將和大家分享Linux系統中常用的軟體安裝方式。廢話不多說,下麵我們直接進入主題。 一、yum命令 yum(Yellowdog Updater, Modified)是Linux中,特別是在基於RPM的發行版(如Fedora、CentOS、RHEL(Red Hat Enterprise Linux ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家講的是英飛凌MirrorBit工藝NOR Flash的扇區架構設計。 NOR Flash 大家都很熟悉,其內部按組織從小到大分為 Page(128B/256B/512B)、Sector(4KB)、Block(32KB/64KB/128KB/25 ...
  • 本章將和大家分享Linux系統中firewalld防火牆常用的操作命令。廢話不多說,下麵我們直接進入主題。 一、安裝Firewall命令 yum install firewalld firewalld-config 二、防火牆的基本操作 1、查看防火牆狀態 使用systemctl status fi ...
  • 安裝fcitx5 sudo dnf install fcitx5 fcitx5-chinese-addons 很多教程上讓安裝fcitx5-gtk和fcitx5-qt,但是目前dnf在安裝fcitx5時會自動安裝這兩個包。 安裝fcitx5-rime sudo dnf install fcitx5- ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...