• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            FormatMessage的用法

            根據(jù)一個(gè)錯(cuò)誤碼返回一個(gè)錯(cuò)誤訊息

            DWORD FormatMessage(
                DWORD dwFlags,
                LPCVOID lpSource,
                DWORD dwMessageId,
                DWORD dwLanguageId,
                LPTSTR lpBuffer,
                DWORD nSize,
                va_list* Arguments
                );

            dwFlags:
            # FORMAT_MESSAGE_ALLOCATE_BUFFER // 此函數(shù)會(huì)分配內(nèi)存以包含描述字串。
            # FORMAT_MESSAGE_FROM_SYSTEM,  // 在系統(tǒng)的id映射表中尋找描述字串
            # FORMAT_MESSAGE_FROM_HMODULE  // 在其他資源模塊中尋找描述字串
            # FORMAT_MESSAGE_FROM_STRING   // 消息ID是個(gè)字串,不是個(gè)DWORD
            通常為:FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM

            lpSource:
            # 指定了FORMAT_MESSAGE_FROM_HMODULE的話,此參數(shù)表示模塊的HANDLE
            # 指定了FORMAT_MESSAGE_FROM_STRING的話,此參數(shù)表示id字串
            通常為:NULL

            dwMessageId:
            消息ID;如果指定FORMAT_MESSAGE_FROM_STRING,將被忽略。

            dwLanguageId:
            消息描述所用的語言
            通常為:0表示自動(dòng)選擇

            lpBuffer:
            #如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER,則為自己提供的緩沖區(qū)
            #否則為系統(tǒng)LocalAlloc分配,需要被用戶LocalFree

            nSize:
            #如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER,則為自己提供的緩沖區(qū)大小
            #否則為系統(tǒng)LocalAlloc分配之最小緩沖區(qū)大小

            Arguments:
            通常不使用

            下面是個(gè)例子:

            TCHAR* buffer;
            DWORD error = ERROR_DS_OBJ_STRING_NAME_EXISTS;
            ::FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                NULL,
                error,
                0,
                ( LPTSTR )&buffer,
                0,
                NULL );
            ::MessageBox( NULL, buffer, NULL, 0 );
            LocalFree( buffer ); 
            =======================================================================================

            FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,
              NULL,lVal,NULL,(LPTSTR)&hLocal,0,NULL);
            第一個(gè)參數(shù)是標(biāo)志,告訴這個(gè)FormatMessage函數(shù),我想要的特點(diǎn).
            第三個(gè)參數(shù)是DWORD(unsigned long)類型
            第五個(gè)參數(shù)是LPTSTR(這個(gè)類型即可用與ANSI,也克用與Unicode).用來接收與MessageID 對應(yīng)的Description.

            注意:hLocal是HLOCAL類型也就是HANDLE類型,需要將他轉(zhuǎn)換到LPTSTR.
            第六個(gè)參數(shù)是這個(gè)buffer的大小,由于設(shè)置了FORMAT_MESSAGE_ALLOCATE_BUFFER那么他就可以置0了

            例如:

               char szError[256];
               DWORD dwError = GetLastError();
               FormatMessage(
                FORMAT_MESSAGE_FROM_SYSTEM,
                NULL,                       
                0,
                0,
                szError,
                sizeof(szError),
                NULL);
               AfxMessageBox(szError);

            =======================================================================================

            FormatMessage功能就是將GetLastError得到的錯(cuò)誤信息(這個(gè)錯(cuò)誤信息是數(shù)字代號)轉(zhuǎn)化成字符串信息的函數(shù)
            FormatMessage()
            函數(shù)FormatMessage聲明如下:
            WINBASEAPI
            DWORD
            WINAPI
            FormatMessageA(
                DWORD dwFlags,//錯(cuò)誤信息類型標(biāo)志
                LPCVOID lpSource,//指定本地信息定義 其依賴于第一個(gè)參數(shù)的設(shè)置
                DWORD dwMessageId,//指定被請求的消息標(biāo)示,如果dwFlags設(shè)置為FORMAT_MESSAGE_FROM_STRING 這個(gè)參數(shù)將被忽略
                DWORD dwLanguageId,//指定被請求的消息的語言標(biāo)示
                LPSTR lpBuffer,//用來保存格式話后的消息字符串的地址
                DWORD nSize,//如果第一個(gè)參數(shù)為指定FORMAT_MESSAGE_ALLOCATE_BUFFER 這個(gè)參數(shù)就是字符串的最大長度
                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
            調(diào)用函數(shù)的例子如下:
            #001 //系統(tǒng)錯(cuò)誤信息提示。
            #002  //蔡軍生 2007/11/28 QQ:9073204 深圳
            #003  void TestErrorInfo(void)
            #004  {
            #005         //進(jìn)行出錯(cuò)。
            #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 出錯(cuò)信息 (出錯(cuò)碼=%d): %s"),
            #023                    _T("CreateDirectory"), dw, lpMsgBuf);
            #024
            #025               LocalFree(lpMsgBuf);
            #026
            #027               //輸出提示。
            #028               OutputDebugString(szBuf);
            #029         }
            #030        
            #031  }
            調(diào)用后輸出下面的提示信息:
            CreateDirectory 出錯(cuò)信息 (出錯(cuò)碼=5): 拒絕訪問。

            posted on 2008-07-11 11:43 肥仔 閱讀(1619) 評論(1)  編輯 收藏 引用 所屬分類: MFC存檔

            評論

            # re: FormatMessage的用法  回復(fù)  更多評論   

            轉(zhuǎn)載別人的東東,就要加出處和致謝,這是原則,來不得半點(diǎn)含糊!!!
            2010-05-10 15:45 |
            久久久99精品成人片中文字幕 | 亚洲国产成人久久精品99 | 欧美日韩成人精品久久久免费看| 午夜精品久久影院蜜桃| 久久亚洲AV无码精品色午夜| 国产亚洲精久久久久久无码AV| 色婷婷噜噜久久国产精品12p | 国产美女亚洲精品久久久综合| 97精品伊人久久大香线蕉app| 久久受www免费人成_看片中文| 色偷偷久久一区二区三区| 久久久久久青草大香综合精品| 久久这里只有精品久久| 亚洲国产视频久久| 午夜精品久久久久久| 精品久久久久久无码中文野结衣| 无码人妻久久一区二区三区蜜桃| 日本精品久久久久中文字幕8| 国产精品99久久久精品无码| 久久无码国产| 99久久精品九九亚洲精品| 精品熟女少妇av免费久久| 久久夜色精品国产欧美乱| 欧美性猛交xxxx免费看久久久| 久久电影网一区| 久久99精品久久久久婷婷| 亚洲а∨天堂久久精品| 久久强奷乱码老熟女网站| 国产999精品久久久久久| 久久99热国产这有精品| 久久99国产综合精品免费| 69国产成人综合久久精品| 亚洲国产精品无码久久久蜜芽| 无码八A片人妻少妇久久| 国产69精品久久久久9999APGF | 久久综合狠狠综合久久综合88| 久久综合亚洲鲁鲁五月天| 久久婷婷五月综合97色| 18岁日韩内射颜射午夜久久成人| 伊人久久大香线蕉av一区| 午夜精品久久久久|