Windows API一日一练 81 FormatMessage函数
作者:互联网
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
在开发软件的过程里,经常要做的工作就是调试程序,许多问题的出现,不但是逻辑的问题,还有可能是对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): 拒绝访问。再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
标签:API,Windows,错码,FormatMessage,出错,DWORD,lpMsgBuf 来源: https://www.cnblogs.com/skiwnchh/p/10515587.html