1.错误处理

 1 /********************************************************************
 2     created:    2020/06/28   15:29
 3     filename:     H:\2020-2021\Windows核心编程\Windows核心编程\1.错误处理\错误处理.cpp
 4     file base:    错误处理
 5     author:        Ocean
 6     
 7     purpose:    Practice makes perfect.
 8 *********************************************************************/
 9 
10 #include <windows.h>
11 #include <iostream>
12 #include "resource.h"
13 using namespace  std;
14 
15 HWND hwnd_edit = NULL; //错误代码
16 HWND hwnd_edit_content = NULL;//显示提示内容
17 DWORD systemLocale; //本地语言
18 HLOCAL hlocal = NULL; //储存内容的句柄
19 int CALLBACK MainDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
20     switch (uMsg)
21     {
22     case WM_CLOSE:
23     {
24         PostQuitMessage(0);
25         return 1;
26     }
27     case WM_INITDIALOG: {
28         hwnd_edit = GetDlgItem(hwnd,IDC_EDIT);
29         hwnd_edit_content = GetDlgItem(hwnd,IDC_EDIT_Content);
30 
31         HANDLE hFile = CreateFile(TEXT("D:\\jeff.txt"), 0, 0, NULL, OPEN_EXISTING, 0, NULL);
32         DWORD error = GetLastError();
33 
34         //转换
35         TCHAR str[20];
36         wsprintf(str, L"%d", error);
37         ///设置编辑框内容
38         SetWindowText(hwnd_edit, str);
39 
40         //设置默认系统信息
41         systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
42         return 1;
43     }
44     case WM_COMMAND:{
45         switch (LOWORD(wParam))
46         {
47         case IDYES:
48             //进行查询
49             DWORD errcode = GetDlgItemInt(hwnd, IDC_EDIT, NULL, false);
50             BOOL fok = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, errcode, systemLocale, (PTSTR)&hlocal, 0, NULL);
51             //处理查询失败的情况
52             if (!fok) {
53                 HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
54                 if (hDll!=NULL)
55                 {
56                     fok = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, hDll, errcode, systemLocale,(LPWSTR)&hlocal, 0, NULL);
57                     FreeLibrary(hDll);
58                 }
59             }
60             if (!fok) {
61                 SetWindowText(hwnd_edit_content, TEXT("NO text found for this error number."));
62             }
63             else {
64                 SetWindowText(hwnd_edit_content, (PCTSTR)hlocal);
65                 LocalFree(hlocal);
66             }
67             return 1;
68         }
69     }
70 
71         default:
72             break;
73     }
74     return 0;
75 }
76 
77 int APIENTRY WinMain(HINSTANCE hInstanceExe ,HINSTANCE hPrevInstance, LPSTR pszCmdline,int nCmdShow) {
78 
79 
80     
81     DialogBoxW(hInstanceExe,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL, MainDlgProc);
82     return 0;
83 }

主要就是熟悉了几个api,查询错误信息的FormatMessage等。然后可以扩展自己的错误代码定义,替换掉nemsg.dll即可,按照微软提供的格式可以自定义错误码。

posted @ 2020-07-06 10:44  a1094426901  阅读(99)  评论(0)    收藏  举报