13.6.3 ProcessErrorMessage()函数的实现

2013-10-07 14:36:10 · 作者: · 浏览: 56

13.6.3  ProcessErrorMessage()函数的实现

ProcessErrorMessage()函数负责处理并提示错误信息,实现如下:

  1. 01  void CMySerial::ProcessErrorMessage(char* ErrorText)  
  2. 02  {  
  3. 03      char *Temp = new char[200];  
  4. 04      LPVOID lpMsgBuf;                                //保存错误信息的指针  
  5. 05      //将GetLastError()得到的错误信息转化成字符串信息  
  6. 06      FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |   
  7. 07                      FORMAT_MESSAGE_FROM_SYSTEM,  
  8. 08                      NULL,  
  9. 09                      GetLastError(),  
  10. 10                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),  
  11. 11                      (LPTSTR) &lpMsgBuf,  
  12. 12                      0,  
  13. 13                      NULL );  
  14. 14      sprintf(Temp, "WARNING:  %s Failed with the following error:        \n%s\nPort: %d\n",  
  15. 15           (char*)ErrorText, lpMsgBuf, m_nPortNr);    //整合完成的错误信息  
  16. 16      MessageBox(NULL, Temp, "Application Error", MB_ICONSTOP);                                                       //提示错误信息  
  17. 17      LocalFree(lpMsgBuf);                            //释放资源  
  18. 18      delete [] Temp;  
  19. 19  } 

【代码解析】

第6~13行调用FormatMessage()函数,将GetLastError()函数返回的错误号转化成字符串信息。第14、15行将刚刚转化的字符串信息与错误发生的位置,整合成一个完成错误信息字符串保存到Temp所指向的空间上。第16行调用MessageBox()函数将整合后的信息弹出给用户。

FormatMessage()函数原型如下:

  1. DWORD FormatMessageA(   
  2.     DWORD       dwFlags,        //错误信息类型标志  
  3.     LPCVOID lpSource,       //指定本地信息定义,其依赖于第一个参数的设置  
  4.     DWORD   dwMessageId,    //指定被请求的消息标示  
  5.     DWORD   dwLanguageId,   //指定被请求的消息语言标示  
  6.     LPSTR   lpBuffer,       //指向一个格式化消息缓冲区  
  7.     DWORD   nSize,          //指定输出缓冲区大小  
  8.     va_list *Arguments  //指向在格式化消息中被用来插入数值的一个32位数值的数组  
  9. );