• <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>
            隨筆 - 64, 文章 - 11, 評論 - 12, 引用 - 0
            數據加載中……

            適用于使用COM技術的日志記錄

                   這個模塊的宏,我幾乎是完全抄襲已存在的一個作品中的代碼, 只是在記錄日志時是調用以前發布的日記模塊功能.

              1/**
              2* @file: Log_for_com.h
              3*
              4* @brief: provide write log message function, macro, and assistant class.
              5*
              6* @author: Robert xiao
              7*
              8*/

              9
             10#pragma once
             11
             12//////////////////////////////////////////////////////////////////////////
             13// FUNCTION
             14//
             15void PrintSkipNote(HRESULT hRes, LPCTSTR szFunction);
             16
             17BOOL CheckHResFn(HRESULT hRes,LPCTSTR szFunction,UINT uidErrorMsg,LPCTSTR szFile,int iLine);
             18
             19BOOL WarnHResFn(HRESULT hRes,LPCTSTR szFunction,UINT uidErrorMsg,LPCTSTR szFile,int iLine);
             20
             21HRESULT DialogOnWin32Error(LPCTSTR szFile,int iLine, LPCTSTR szFunction);
             22
             23HRESULT WarnOnWin32Error(LPCTSTR szFile,int iLine, LPCTSTR szFunction);
             24
             25//////////////////////////////////////////////////////////////////////////
             26// MACROS
             27//
             28#define HRES_TO_BOOL(hr) \
             29    (SUCCEEDED(hr)? TRUE: FALSE)
             30
             31#define RETURN_HRES_TO_INTEGER(hr, su, fa)\
             32    return (SUCCEEDED(hr)? su: fa)
             33
             34#define RETURN_HRES_TO_SPECVAL(hr, su, fa)\
             35    return (SUCCEEDED(hr)? su: fa)
             36
             37#define EC_H(fnx)    \
             38    if (SUCCEEDED(hRes))    \
             39{    \
             40    hRes = (fnx);    \
             41    CheckHResFn(hRes,_T(#fnx),NULL,__TFILE__,__LINE__);    \
             42}
                \
             43else    \
             44{    \
             45    PrintSkipNote(hRes,_T(#fnx));\
             46}

             47
             48#define WC_H(fnx)    \
             49    if (SUCCEEDED(hRes))    \
             50{    \
             51    hRes = (fnx);    \
             52    WarnHResFn(hRes,_T(#fnx),NULL,__TFILE__,__LINE__);    \
             53}
                \
             54else    \
             55{    \
             56    PrintSkipNote(hRes,_T(#fnx));\
             57}

             58
             59#define EC_H_MSG(fnx,uidErrorMsg)    \
             60    if (SUCCEEDED(hRes))    \
             61{    \
             62    hRes = (fnx);    \
             63    CheckHResFn(hRes,_T(#fnx),uidErrorMsg,__TFILE__,__LINE__);    \
             64}
                \
             65else    \
             66{    \
             67    PrintSkipNote(hRes,_T(#fnx));\
             68}

             69
             70#define WC_H_MSG(fnx,uidErrorMsg)    \
             71    if (SUCCEEDED(hRes))    \
             72{    \
             73    hRes = (fnx);    \
             74    WarnHResFn(hRes,_T(#fnx),uidErrorMsg,__TFILE__,__LINE__);    \
             75}
                \
             76else    \
             77{    \
             78    PrintSkipNote(hRes,_T(#fnx));\
             79}

             80
             81#define EC_W32(fnx)    \
             82    if (SUCCEEDED(hRes))    \
             83{    \
             84    hRes = (fnx);    \
             85    CheckHResFn(HRESULT_FROM_WIN32(hRes),_T(#fnx),NULL,__TFILE__,__LINE__);    \
             86}
                \
             87else    \
             88{    \
             89    PrintSkipNote(hRes,_T(#fnx));\
             90}

             91
             92#define WC_W32(fnx)    \
             93    if (SUCCEEDED(hRes))    \
             94{    \
             95    hRes = (fnx);    \
             96    WarnHResFn(HRESULT_FROM_WIN32(hRes),_T(#fnx),NULL,__TFILE__,__LINE__);    \
             97}
                \
             98else    \
             99{    \
            100    PrintSkipNote(hRes,_T(#fnx));\
            101}

            102
            103#define EC_B(fnx)    \
            104    if (SUCCEEDED(hRes))    \
            105{    \
            106    if (!(fnx))    \
            107{    \
            108    hRes = DialogOnWin32Error(__TFILE__,__LINE__,_T(#fnx));    \
            109}
                \
            110}
                \
            111else    \
            112{    \
            113    PrintSkipNote(hRes,_T(#fnx));\
            114}

            115
            116#define WC_B(fnx)    \
            117    if (SUCCEEDED(hRes))    \
            118{    \
            119    if (!(fnx))    \
            120{    \
            121    hRes = WarnOnWin32Error(__TFILE__,__LINE__,_T(#fnx));\
            122}
                \
            123}
                \
            124else    \
            125{    \
            126    PrintSkipNote(hRes,_T(#fnx));\
            127}

            128
            129
            130#define EC_D(_ret,fnx)    \
            131    \
            132    if (SUCCEEDED(hRes))    \
            133{    \
            134    _ret = (fnx);    \
            135    if (!_ret)    \
            136{    \
            137    hRes = DialogOnWin32Error(__TFILE__,__LINE__,_T(#fnx));    \
            138}
                \
            139}
                \
            140else    \
            141{    \
            142    PrintSkipNote(hRes,_T(#fnx));\
            143    _ret = NULL;    \
            144}

            145
            146#define WC_D(_ret,fnx)    \
            147    if (SUCCEEDED(hRes))    \
            148{    \
            149    _ret = (fnx);    \
            150    if (!_ret)    \
            151{    \
            152    hRes = WarnOnWin32Error(__TFILE__,__LINE__,_T(#fnx));\
            153}
                \
            154}
                \
            155else    \
            156{    \
            157    PrintSkipNote(hRes,_T(#fnx));\
            158    _ret = NULL;    \
            159}

            160
            161#define EC_H_GETPROPS(fnx)    \
            162    \
            163    if (SUCCEEDED(hRes))    \
            164{    \
            165    hRes = (fnx);    \
            166    if (MAPI_W_ERRORS_RETURNED != hRes) CheckHResFn(hRes,_T(#fnx),NULL,__TFILE__,__LINE__);    \
            167}
                \
            168else    \
            169{    \
            170    PrintSkipNote(hRes,_T(#fnx));\
            171}

            172
            173#define WC_H_GETPROPS(fnx)    \
            174    \
            175    if (SUCCEEDED(hRes))    \
            176{    \
            177    hRes = (fnx);    \
            178    if (MAPI_W_ERRORS_RETURNED != hRes) WarnHResFn(hRes,_T(#fnx),NULL,__TFILE__,__LINE__);    \
            179}
                \
            180else    \
            181{    \
            182    PrintSkipNote(hRes,_T(#fnx));\
            183}

            184
            185#define EC_H_CANCEL(fnx)    \
            186    \
            187    if (SUCCEEDED(hRes))    \
            188{    \
            189    hRes = (fnx);    \
            190    if (MAPI_E_USER_CANCEL == hRes || MAPI_E_CANCEL == hRes) \
            191{ \
            192    WarnHResFn(hRes,_T(#fnx),IDS_USERCANCELLED,__TFILE__,__LINE__); \
            193    hRes = S_OK; \
            194}
             \
            195    else CheckHResFn(hRes,_T(#fnx),NULL,__TFILE__,__LINE__);    \
            196}
                \
            197else    \
            198{    \
            199    PrintSkipNote(hRes,_T(#fnx));\
            200}

            201
            202#define EC_D_DIALOG(fnx)    \
            203{    \
            204    iDlgRet = (fnx);    \
            205    if (IDCANCEL == iDlgRet)    \
            206{    \
            207    DWORD err = CommDlgExtendedError();    \
            208    if (err) \
            209{ \
            210    ErrDialog(__TFILE__,__LINE__,IDS_EDCOMMONDLG,_T(#fnx),err);    \
            211    hRes = MAPI_E_CALL_FAILED;    \
            212}
             \
            213        else hRes = S_OK; \
            214}
                \
            215}

            216
            217#define EC_PROBLEMARRAY(problemarray)    \
            218{    \
            219    if (problemarray)    \
            220{    \
            221    CString szProbArray = ProblemArrayToString((problemarray));    \
            222    ErrDialog(__TFILE__,__LINE__,IDS_EDPROBLEMARRAY,(LPCTSTR) szProbArray);    \
            223    DebugPrint(DBGGeneric,_T("Problem array:\n%s\n"),(LPCTSTR) szProbArray);    \
            224}
                \
            225}

            226
            227#define EC_MAPIERR(__ulflags,__lperr)    \
            228{    \
            229    if (__lperr)    \
            230{    \
            231    CString szErr = MAPIErrToString((__ulflags),(__lperr));    \
            232    ErrDialog(__TFILE__,__LINE__,IDS_EDMAPIERROR,(LPCTSTR) szErr);    \
            233    DebugPrint(DBGGeneric,_T("LPMAPIERROR:\n%s\n"),(LPCTSTR) szErr);    \
            234}
                \
            235}

            236
            237#define EC_TNEFERR(problemarray)    \
            238{    \
            239    if (problemarray)    \
            240{    \
            241    CString szProbArray = TnefProblemArrayToString((problemarray));    \
            242    ErrDialog(__TFILE__,__LINE__,IDS_EDTNEFPROBLEMARRAY,(LPCTSTR) szProbArray);    \
            243    DebugPrint(DBGGeneric,_T("TNEF Problem array:\n%s\n"),(LPCTSTR) szProbArray);    \
            244}
                \
            245}
             1/**
             2* @file: Log_for_com.cpp
             3*
             4* @brief: provide write log message function, macro, and assistant class.
             5*
             6* @author: Robert xiao
             7*
             8*/

             9
            10#include "stdafx.h"
            11#include "Log_for_com.h"
            12
            13BOOL CheckHResFn(HRESULT hRes,LPCTSTR szFunction,UINT uidErrorMsg,LPCTSTR szFile,int iLine)
            14{
            15    if (S_OK == hRes) return true;
            16    Log_entity::GetInstance()->Log(Log_entity::LL_ERROR, 
            17        szFile, 
            18        iLine,
            19        _T("%s failed, error:%d"), 
            20        szFunction, 
            21        GetLastError());
            22    return false;
            23}

            24
            25BOOL WarnHResFn(HRESULT hRes,LPCTSTR szFunction,UINT uidErrorMsg,LPCTSTR szFile,int iLine)
            26{
            27    if (S_OK == hRes) return true;
            28    Log_entity::GetInstance()->Log(Log_entity::LL_WARNING, 
            29        szFile, 
            30        iLine,
            31        _T("%s failed, error:%d"), 
            32        szFunction, 
            33        GetLastError());
            34    return SUCCEEDED(hRes);
            35}

            36
            37void PrintSkipNote(HRESULT hRes,LPCTSTR szFunc)
            38{
            39    Log_entity::GetInstance()->Log(Log_entity::LL_INFO,
            40        _T("Skinnping %s because hRes = 0x%8x.\n"),
            41        szFunc,
            42        hRes);
            43}

            44
            45HRESULT DialogOnWin32Error(LPCTSTR szFile,int iLine, LPCTSTR szFunction)
            46{
            47    DWORD dwErr = GetLastError();
            48    if (0 == dwErr) return S_OK;
            49
            50    HRESULT hRes = HRESULT_FROM_WIN32(dwErr);
            51    if (S_OK == hRes) return S_OK;
            52    Log_entity::GetInstance()->Log(Log_entity::LL_ERROR, 
            53        szFile, 
            54        iLine,
            55        _T("%s failed, error:%d"), 
            56        szFunction, 
            57        GetLastError());
            58
            59    return hRes;
            60}

            61
            62HRESULT WarnOnWin32Error(LPCTSTR szFile,int iLine, LPCTSTR szFunction)
            63{
            64    DWORD dwErr = GetLastError();
            65    HRESULT hRes = HRESULT_FROM_WIN32(dwErr);
            66
            67    if (S_OK != hRes){
            68        Log_entity::GetInstance()->Log(Log_entity::LL_WARNING, 
            69            szFile, 
            70            iLine,
            71            _T("%s failed, error:%d"), 
            72            szFunction, 
            73            GetLastError());
            74    }

            75    return hRes;
            76}

            posted on 2010-06-11 16:13 Robertxiao 閱讀(375) 評論(0)  編輯 收藏 引用 所屬分類: RPC/COM/ATL散談

            国产精品久久久久乳精品爆| 亚洲精品国产自在久久| 久久99中文字幕久久| 四虎国产精品免费久久久| 精品综合久久久久久88小说| 久久精品一本到99热免费| 亚洲成人精品久久| 久久久久久国产精品免费无码| 91精品国产91久久久久久| 亚洲国产精品无码久久久秋霞2 | A级毛片无码久久精品免费| 国产69精品久久久久观看软件| 久久久国产精品福利免费| 麻豆精品久久久久久久99蜜桃| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 狠狠干狠狠久久| 日韩精品久久无码中文字幕| 久久综合九色欧美综合狠狠| 狠狠色丁香久久婷婷综合五月| 久久精品人人做人人爽电影 | 亚洲av日韩精品久久久久久a| 久久综合久久伊人| 国产精品99久久不卡| 久久99国产精品久久99| 久久精品麻豆日日躁夜夜躁| 亚洲国产精品久久久天堂| 中文字幕无码av激情不卡久久| 国产精品美女久久久免费| 99久久精品免费| 精品久久久久久无码人妻热| 91久久精品国产成人久久| 狠狠综合久久综合中文88| 国产精品久久久99| 欧美亚洲另类久久综合婷婷| 久久亚洲中文字幕精品一区四| 久久乐国产精品亚洲综合| 亚州日韩精品专区久久久| 久久婷婷五月综合色奶水99啪| 亚洲精品国精品久久99热| 亚洲va久久久噜噜噜久久狠狠 | 色婷婷噜噜久久国产精品12p |