本例介绍如何在Win32编程中进行错误处理。
在Win32API函数中,一般返回值类型为如下几种:
GetLastError函数是在程序调用Win32 API函数出现错误时,获取最后一次错误的编号,以便进一步确定具体错误原因,GetLastError函数返回一个整数,表示错误代码,每个代码的含义可以在头文件WinError.h中找到申明。
#include <tchar.h> #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <windows.h> #define MAX_ERROR 512 int main(int argc, char* argv[]) { // 保存错误编号 DWORD dwError = NO_ERROR; // 保存错误信息 TCHAR szBuffer[MAX_ERROR] = TEXT(""); // 保存文件句柄 HANDLE hFile = INVALID_HANDLE_VALUE; // 调用C函数设置当前区域环境为中国 _tsetlocale(LC_ALL, _T("zhi")); // 调用API打开一个文件(由于此文件不存在,所以该函数调用不成功) hFile = CreateFile(TEXT("c:/abc.dat"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); // 判断文件句柄是否有效,如无效,则调用GetLastError获取错误代码 if (hFile == INVALID_HANDLE_VALUE) { dwError = GetLastError(); _tprintf(_T("错误代码为: %d。/n"), dwError); // 根据GetLastError函数返回值判断错误原因 if (dwError == ERROR_INVALID_NAME) { _tprintf(_T("错误代码显示错误原因为:文件名错误。/n")); } } if (dwError != NO_ERROR) { // 调用FormatMessage函数获取系统定义的错误信息 DWORD nLen = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, // 设置消息来自于系统且忽略插入词 NULL, // 设置消息源,函数可以通过这个消息源格式化错误信息,此处不使用消息源,所以设置为NULL dwError, // 错误编号 0, // 语言信息,0表示使用系统默认语言 szBuffer, // 存放错误信息的缓冲区 MAX_ERROR, // 缓冲区长度(最大字数) NULL // 用于格式化信息的参数,这里为NULL ); if (nLen > 0) { _tprintf(_T("系统提示错误信息为: %s"), szBuffer); } else { _tprintf(_T("无法获取错误信息。")); } } system("pause"); return 0; }