首页 > 系统相关 >《Windows核心编程》:错误处理

《Windows核心编程》:错误处理

时间:2024-08-17 17:16:32浏览次数:8  
标签:函数 Windows 编程 错误码 Win32 API 错误处理

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函数可以将干巴巴的错误码转换为世界各国程序员都能看懂的自然语言。在调用函数的过程中,传入约定的有效的参数就一定执行成功并返回正确的结果,通过错误码可以查询到成功的原因;一旦执行失败返回错误,通过错误码可以查询到明确的错误原因并及时修正错误。女生就不是这么回事了,你把左脸伸过去她要扇你右脸,她说不要可能是要,究其原因,她恼怒的说你不懂她,女生就是这么让人捉摸不透,不可理喻。可见编程是多么的确定及美好(这时候女生要说话了:跟你的程序过一辈子去吧!)。   所有的开发语言、开发框架都有一套异常、错误处理机制,一个聪明的、合格的程序员必然要学会使用这些机制巧妙的处理开发过程中碰到的各种问题。不然,程序不稳定、售后不开心、客户不满意、回款不及时、老板就要炒你鱿鱼。那么男女相处的过程中也要建立错误处理机制,不然,稍有不慎就一拍两散、鸡飞蛋打、满盘皆输。可见错误处理是多么的重要。

标签:函数,Windows,编程,错误码,Win32,API,错误处理
From: https://www.cnblogs.com/zengxiangchun/p/-/windows-error

相关文章

  • 区块链编程golang(五)—钱包
     block/block.gopackageblockchainimport("bytes""crypto/sha256""encoding/gob""log")typeBlockstruct{Hash[]byteTransactions[]*TransactionPrevHash[]byte......
  • Python编程常用英文单词大全!收藏别忘了!
      Python编程中常用的英文单词非常丰富,这些单词涵盖了编程的各个方面,包括基础概念、数据类型、控制结构、函数与模块、类与对象、异常处理等。以下是一些常用的英文单词及其简要说明:1.基础概念Variable(变量):用来存储和表示数据的容器。Function(函数):一段可重复使用的代码......
  • ZYNQ SoC如何读取在Windows下配置的环境变量
    在解释ZYNQSoC如何读取在Windows下配置的环境变量之前,需要澄清一点:通常,ZYNQSoC或任何嵌入式系统并不直接在Windows操作系统下运行或配置环境变量。环境变量的配置通常是在嵌入式系统的开发阶段,在开发主机(可能是运行Windows的PC)上进行的,然后通过交叉编译、生成镜像文件等方......
  • windows10系统更新在哪里,教你找windows10系统更新在哪里
    在Windows10系统中,系统更新通常可以通过以下几种方式访问和管理:一、设置应用:1.点击屏幕左下角的“开始”菜单(Windows徽标)。2.点击“设置”(齿轮图标)。3.在Windows设置窗口中,点击“更新和安全”。4.在“更新和安全”窗口中,选择“Windows更新”。在这里,你可以检查更新(点击......
  • 面试题:在Java中,多线程编程是常见的并发处理方式。请简述Java中实现多线程的几种主要方
    面试题:在Java中,多线程编程是常见的并发处理方式。请简述Java中实现多线程的几种主要方式,并解释每种方式的基本思想。更多关于多线程编程的深入解析、面试技巧、以及实战项目源码,手机浏览器即可访问面霸宝典【全拼音】.com,这里不仅可以优化你的简历,还能进行模拟面试,获取最新最......
  • 区块链编程go(四)-交易
     part1:packageblockchainimport("bytes""crypto/sha256""encoding/gob""encoding/hex""fmt""log")typeTransactionstruct{ID[]byteInputs[]TxIn......
  • 信息学奥赛一本通编程启蒙题解(3011~3015)
    前言Hello大家好,我是文宇.正文3011#include<iostream>usingnamespacestd;intmain(){ inta,b,s; a=880; b=500; s=a*b; cout<<s; return0;}注:没有输入的都可以直接输出.3012#include<iostream>usingnamespacestd;inta,b,t;intmain(){ a=10;b=20......
  • 信息学奥赛一本通编程启蒙题解(3021~3025)
    前言hello大家好,我是文宇。正文3021#include<iostream>usingnamespacestd;inta,b,c,d;intmain(){ cin>>a>>b>>c>>d; cout<<a+b+c+d; return0;}3022#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b,c; ......
  • electron-forge通过Squirrel.Windows打包导致的asar文件过大的解决方案
    环境我的Eectron环境如下:"@electron-forge/cli":"^7.1.0","@electron-forge/maker-deb":"^7.1.0","@electron-forge/maker-rpm":"^7.1.0","@electron-forge/maker-squirrel":"^7.1.0",&q......
  • 【嵌入式开发之网络编程】互联网的基本概念
    计算机网络的定义计算机网络的精确定义并未统一:以功能完善的网络软件及通信协议实现资源共享和信息传递的系统。以传输信息为基本目的,用通信线路和通信设备将多个计算机连接起来的计算机系统的集合。计算机网络的分类 按照网络的作用范围进行分类类别作用范围或距离广域......