13.6.3 ProcessErrorMessage()函数的实现
ProcessErrorMessage()函数负责处理并提示错误信息,实现如下:
- 01 void CMySerial::ProcessErrorMessage(char* ErrorText)
- 02 {
- 03 char *Temp = new char[200];
- 04 LPVOID lpMsgBuf; //保存错误信息的指针
- 05 //将GetLastError()得到的错误信息转化成字符串信息
- 06 FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
- 07 FORMAT_MESSAGE_FROM_SYSTEM,
- 08 NULL,
- 09 GetLastError(),
- 10 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- 11 (LPTSTR) &lpMsgBuf,
- 12 0,
- 13 NULL );
- 14 sprintf(Temp, "WARNING: %s Failed with the following error: \n%s\nPort: %d\n",
- 15 (char*)ErrorText, lpMsgBuf, m_nPortNr); //整合完成的错误信息
- 16 MessageBox(NULL, Temp, "Application Error", MB_ICONSTOP); //提示错误信息
- 17 LocalFree(lpMsgBuf); //释放资源
- 18 delete [] Temp;
- 19 }
【代码解析】
第6~13行调用FormatMessage()函数,将GetLastError()函数返回的错误号转化成字符串信息。第14、15行将刚刚转化的字符串信息与错误发生的位置,整合成一个完成错误信息字符串保存到Temp所指向的空间上。第16行调用MessageBox()函数将整合后的信息弹出给用户。
FormatMessage()函数原型如下:
- DWORD FormatMessageA(
- DWORD dwFlags, //错误信息类型标志
- LPCVOID lpSource, //指定本地信息定义,其依赖于第一个参数的设置
- DWORD dwMessageId, //指定被请求的消息标示
- DWORD dwLanguageId, //指定被请求的消息语言标示
- LPSTR lpBuffer, //指向一个格式化消息缓冲区
- DWORD nSize, //指定输出缓冲区大小
- va_list *Arguments //指向在格式化消息中被用来插入数值的一个32位数值的数组
- );