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