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即可,按照微软提供的格式可以自定义错误码。

浙公网安备 33010602011771号