学习win32 API开发4-GetLastError和FormatMessage获取错误信息
来源:互联网 发布:ftp端口下载文件 编辑:程序博客网 时间:2024/05/29 03:26
一、FormatMessage
#include "windows.h"void ShowErrMsg() { TCHAR szBuf[80]; LPVOID lpMsgBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); MessageBox(NULL, (LPTSTR)lpMsgBuf, "系统错误", MB_OK|MB_ICONSTOP); //OutputDebugString(); LocalFree(lpMsgBuf);}LRESULT CALLBACK WinProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, LPSTR lpCmdLine, int nShowCmd ){TCHAR* clsName="myclass";WNDCLASS mwc;//设计窗口类mwc.lpfnWndProc = WinProc;//窗口处理函数//mwc.hbrBackground = (HBRUSH)COLOR_WINDOW;//窗口背景色mwc.lpszClassName = clsName;// 窗口类名mwc.style = NULL;//窗口类型mwc.cbClsExtra = 0;//窗口扩展mwc.cbWndExtra = 0;//窗口实例扩展mwc.hCursor = NULL;//窗口鼠标光标mwc.hIcon = NULL;//窗口的最小化图标mwc.lpszMenuName = NULL;//窗口菜单mwc.hInstance = hInstance;//实例句柄//注册窗口类RegisterClass(&mwc);//创建窗口HWND hwnd = CreateWindow(clsName,//类名,就是刚才注册的//"HEHE",TEXT("Windows的标题"),//窗口标题WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,//外观样式400,//相对于父窗口的X坐标150,//相对于父窗口的Y坐标400,//窗口的宽400,//窗口的高NULL,//父窗口,没有就写NULLNULL,//窗口菜单,也没有,写NULLhInstance,//当前应用程序的实例句柄NULL);//附加数据,没有,为NULLif( hwnd == NULL)//检查窗口是否创建成功{ShowErrMsg();//DWORD err = GetLastError();//TCHAR er[123] ;//wsprintf(er,"%i",err);//MessageBox(NULL,er,TEXT("提示"),MB_ICONWARNING);MessageBox(NULL,TEXT("创建窗口失败"),TEXT("提示"),MB_ICONWARNING);return 0;}//显示窗口和更新窗口ShowWindow(hwnd,SW_SHOW);UpdateWindow(hwnd);//消息循环MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}//MessageBox(NULL,TEXT("你好 Windows 世界^_^"),TEXT("标题"),MB_OK);return 0;}LRESULT CALLBACK WinProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam){switch(umsg){case WM_DESTROY:{PostQuitMessage(0);//终止程序return 0;}}return DefWindowProc(hwnd,umsg,wparam,lparam);}这个程序与上一篇“win32 开发3-一个窗口创建的经典步骤”的不同之处就是增加了ShowErrMsg,以及把设计窗口类的mwc.hbrBackground = (HBRUSH)COLOR_WINDOW;注释掉了。
用FormatMessage创建一个自己的 ShowErrMsg函数,用窗口来显示错误信息:
void ShowErrMsg()
{
TCHAR szBuf[80];
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
MessageBox(NULL, (LPTSTR)lpMsgBuf, "系统错误", MB_OK|MB_ICONSTOP);
LocalFree(lpMsgBuf);
}
看下程序运行结果:找不到窗口类。
二、GetLastError
修改程序,把ShowErrMsg()注释掉,最后把对应的代码修改为:
if( hwnd == NULL) //检查窗口是否创建成功
{
//ShowErrMsg();
DWORD err = GetLastError();
TCHAR er[123] ;
wsprintf(er,"%i",err);
MessageBox(NULL,er,TEXT("提示"),MB_ICONWARNING);
MessageBox(NULL,TEXT("创建窗口失败"),TEXT("提示"),MB_ICONWARNING);
return 0;
}
运行后的结果是:1407,这是GetLastError返回的错误信息代码,搜索这个错误代码可以知道是窗口类不存在。
这两种错我信息显示的方式,个人比较喜欢第一种,更直观,只是稍多点代码。
- 学习win32 API开发4-GetLastError和FormatMessage获取错误信息
- GetLastError和FormatMessage
- GetLastError()和FormatMessage()
- GetLastError()和FormatMessage()
- 【VC++】FormatMessage 获取 GetLastError 信息。
- FormatMessage 格式化 GetLastError 获取的错误代码
- FormatMessage &GetLastError
- 使用FormatMessage功得到GetLastError得到的错误信息
- c++学习之:根据GetLastError()返回值获取错误信息
- GetLastError 和 FormatMessage搭配使用的模板
- GetLastError和FormatMessage的简单使用
- [vb]获取GetLastError的错误信息
- 使用FormatMessage获取由GetLastError得到的错误的描述
- SetLastError GetLastError FormatMessage
- FormatMessage 格式化 GetLastError 错误代码
- VC中GetLastError()获取错误信息的使用
- 根据GetLastError()返回值获取错误信息
- VC中GetLastError()获取错误信息的使用
- 港版iPhone
- 闲谈安全的脚本和异步函数的数据安全问题
- NSdata 与 NSString,Byte数组,UIImage 的相互转换---ios开发 Objective-C
- android摘要
- C程序设计Week5
- 学习win32 API开发4-GetLastError和FormatMessage获取错误信息
- Linux 下配置Tinyxml,将其编译为动态库
- 找bug的小技巧
- 多地房企垫首付刺激销量 规避首付比例限制政策
- Cocoa stream 系列1---异步读取文件(Reading and Writing Files Asynchronously)
- 重新靠岸是吧??
- 动态规划中LCS
- js实现只能输入数字小数点、其他输入不进去
- 多地房企垫首付刺激销量 规避首付比例限制政策