Windows API一日一练(81)FormatMessage函数
来源:互联网 发布:手机高程测量软件 编辑:程序博客网 时间:2024/05/31 00:39
在开发软件的过程里,经常要做的工作就是调试程序,许多问题的出现,不但是逻辑的问题,还有可能是对API的不熟悉,或者某种条件下调用API会出错的。那么这些出错的原因是什么呢?通常只获取到错误码,也就是通过函数GetLastError得到。当然可以根据这个错误码去查找MSDN就可以知道出错的原因,但有时在客户那里并没有MSDN,那么就需要把调用API函数出错的信息显示出来,或者写到LOG里去。这时就需要调用函数FormatMessage把出错码详细原因显示出来。
函数FormatMessage声明如下:
WINBASEAPI
DWORD
WINAPI
FormatMessageA(
DWORD dwFlags,
LPCVOID lpSource,
DWORD dwMessageId,
DWORD dwLanguageId,
LPSTR lpBuffer,
DWORD nSize,
va_list *Arguments
);
WINBASEAPI
DWORD
WINAPI
FormatMessageW(
DWORD dwFlags,
LPCVOID lpSource,
DWORD dwMessageId,
DWORD dwLanguageId,
LPWSTR lpBuffer,
DWORD nSize,
va_list *Arguments
);
#ifdef UNICODE
#define FormatMessage FormatMessageW
#else
#define FormatMessage FormatMessageA
#endif // !UNICODE
调用函数的例子如下:
#001 //系统错误信息提示。
#002 //蔡军生 2007/11/28 QQ:9073204 深圳
#003 void TestErrorInfo(void)
#004 {
#005 //进行出错。
#006 if (!CreateDirectory(_T("c://"),0))
#007 {
#008 TCHAR szBuf[128];
#009 LPVOID lpMsgBuf;
#010 DWORD dw = GetLastError();
#011
#012 FormatMessage(
#013 FORMAT_MESSAGE_ALLOCATE_BUFFER |
#014 FORMAT_MESSAGE_FROM_SYSTEM,
#015 NULL,
#016 dw,
#017 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
#018 (LPTSTR) &lpMsgBuf,
#019 0, NULL );
#020
#021 wsprintf(szBuf,
#022 _T("%s 出错信息 (出错码=%d): %s"),
#023 _T("CreateDirectory"), dw, lpMsgBuf);
#024
#025 LocalFree(lpMsgBuf);
#026
#027 //输出提示。
#028 OutputDebugString(szBuf);
#029 }
#030
#031 }
调用后输出下面的提示信息:
CreateDirectory 出错信息 (出错码=5): 拒绝访问。
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- Windows API一日一练(81)FormatMessage函数
- 怎样用VS2005进行三层结构应用程序的开发
- Guru of the Week 条款24:编译级防火墙
- (五)Java EE 5实现Web服务(Web Services)及多种客户端实例-移动客户端
- Unreal Tutorial: Custom Mid Game Menu
- Windows API一日一练(85)OpenClipboard函数
- Windows API一日一练(81)FormatMessage函数
- 书讯 -- Training Kit:SQL Server 2005 实作与维护 I II
- (四)Java EE 5实现Web服务(Web Services)及多种客户端实例-胖客户端
- VS.NET2005安装部署之实战
- 测试驱动需求分析--需求文档评审实例
- Windows API一日一练(84)FlushInstructionCache函数
- Windows API一日一练(80)MultiByteToWideChar函数
- (三)Java EE 5实现Web服务(Web Services)及多种客户端实例-瘦客户端
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming