"《Windows via C/C++》中文版PDF,涵盖了Windows核心编程的知识,主要讲解如何使用C/C++语言进行Windows系统级别的编程。"
在Windows编程中,理解和掌握错误处理机制是至关重要的,因为这直接影响到程序的稳定性和可靠性。本章一开始就强调了在调用Windows API函数时,对错误的处理方式。当调用一个Windows函数时,系统会检查传入参数的合法性,并尝试执行相应的任务。如果发现无效参数或者操作无法完成,函数会返回一个特定的值,表明其执行失败。
表1-1列举了Windows函数常用的返回值类型及其失败标志:
1. **VOID**:这类函数的返回值通常不会表示失败,Windows API中很少使用VOID作为返回类型。
2. **BOOL**:返回值是0表示失败,非0则表示成功。建议直接测试返回值是否为0,而不是与TRUE比较,因为某些情况下非0值可能并不等同于TRUE。
3. **HANDLE**:失败时返回NULL,成功则返回一个可用于操作对象的句柄。某些函数可能返回INVALID_HANDLE_VALUE(定义为-1),这需要参考函数的文档来确定。
4. **PVOID**:失败返回NULL,成功返回指向数据块内存地址的指针。
5. **LONG/DWORD**:这类返回值通常用于表示数量,失败可能返回0或-1,具体取决于函数。阅读Platform SDK文档以了解正确的错误检查方法。
当Windows函数遇到错误时,它会生成一个32位的错误代码,这些错误代码具有唯一的编号,可以用于诊断问题。线程本地存储器(Threading Local Storage, TLS)是Windows用来存储线程特定数据的一种机制,当函数检测到错误时,可能会将这个错误代码保存在TLS中,供后续的错误处理代码使用。
为了有效地处理Windows API调用的错误,程序员应遵循以下步骤:
1. **检查返回值**:根据表1-1中的信息,针对不同类型的返回值进行正确的错误检查。
2. **查询错误代码**:当返回值表示失败时,可以使用`GetLastError`函数获取错误代码,然后通过`FormatMessage`函数将错误代码转化为可读的错误消息。
3. **记录和处理错误**:在应用程序中,应记录错误信息,以便调试或向用户报告问题。对于可恢复的错误,可以设计相应的恢复策略;对于不可恢复的错误,可能需要终止程序执行。
4. **理解错误代码**:查阅Windows API文档或Microsoft的官方资源,理解错误代码的含义,以便解决问题。
深入学习Windows核心编程,还包括理解窗口消息、线程同步、内存管理、文件I/O、设备驱动接口等多个方面。通过这本书,读者可以系统地学习和掌握Windows系统级别的编程技术。