按照计划开始每天一章的阅读:),第一章:Error Handling
这一章主要是讲授Windows里面的错误处理,确切地说是WindowsFunction的Error Code以及其意义。
要点:
1、ErrorCode的结构:
//The Structure is as below
// [31---------30]--------------[29]---------------------[28]-------[27-----------------16]-[15-------------0]
// Severity(2bits) | Microsoft/Customer(1bit) | Reserved(1bit) | Facility code(12bit) | Exception Code
// 0 = Success | 0 = Microsoft Defined Code | Must be 0 | The First 256 values |
// 1 = Informational | 1 = Customer Defined Code | | are reserved by | Customer-Defined
// 2 = Warning | | | Microsoft. | code
// 3 = Error | | | |
//------------------------------------------------------------------------------------------------------------
2、两个函数的使用:
FormatMessage Function
Formats a message string. The function requires a message definition as input. The message definition can come from a buffer passed into the function. It can come from a message table resource in an already-loaded module. Or the caller can ask the function to search the system's message table resource(s) for the message definition. The function finds the message definition in a message table resource based on a message identifier and a language identifier. The function copies the formatted message text to an output buffer, processing any embedded insert sequences if requested.
Syntax
DWORD WINAPI FormatMessage(
__in DWORD dwFlags,
__in_opt LPCVOID lpSource,
__in DWORD dwMessageId,
__in DWORD dwLanguageId,
__out LPTSTR lpBuffer,
__in DWORD nSize,
__in_opt va_list *Arguments
);
具体用法:http://msdn.microsoft.com/en-us/library/ms679351.aspx
SetLastError
Function
Sets the last-error code for the calling thread.
Syntax
void WINAPI SetLastError(
__in DWORD dwErrCode
);
具体用法:http://msdn.microsoft.com/en-us/library/ms680627.aspx
3、小技巧一个: 使用$err,hr来查看当前线程的错误码(PS:记得好像老版本的Windows核心编程写的是@err,hr)。
4、错误码的目的: 指示出错误的原因,快速判断WindowsFunction是否正常执行,同时还可以根据错误码格式自己定义自己的函数错误码和描述,还有就是有些函数执行成功的原因有多个,但程序需要对特定原因做处理的时候可以利用GetLastError来区分。
5、代码实践: 本章内容不算多,故此就写个小程序争取把要点都覆盖住,该程序见下图(相比书上面的例子程序增加了些内容,主要是错误码结构的信息,以及用户定义错误码的试验)。【PS:模仿Windows内部的ErrorCode定义,可以建立自己的特定错误码定义表】
Fig1-1:Error Code Look up
Fig1-2 Customer Define Error Code
OK ,这一章算是结束了。:D好像没有什么东西。