• <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
            數(shù)據(jù)加載中……

            適用于使用COM技術(shù)的日志記錄

                   這個(gè)模塊的宏,我?guī)缀跏峭耆u已存在的一個(gè)作品中的代碼, 只是在記錄日志時(shí)是調(diào)用以前發(fā)布的日記模塊功能.

              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 閱讀(357) 評論(0)  編輯 收藏 引用 所屬分類: RPC/COM/ATL散談

            久久青青国产| 久久99精品久久久久久野外| 久久久精品视频免费观看| 国内精品久久久久伊人av| 亚洲精品国产字幕久久不卡| 热久久视久久精品18| 性做久久久久久久久久久| 中文字幕精品久久| 久久综合久久综合亚洲| 久久99热这里只频精品6| 国产精品中文久久久久久久| 少妇熟女久久综合网色欲| 日韩精品久久久肉伦网站| 亚洲午夜久久久久妓女影院 | 久久偷看各类wc女厕嘘嘘| 色偷偷88888欧美精品久久久| 99精品国产99久久久久久97| 午夜精品久久久久久中宇| 少妇高潮惨叫久久久久久| 国产亚洲婷婷香蕉久久精品| 久久99精品国产麻豆宅宅| 久久精品国产欧美日韩| 亚洲欧美国产日韩综合久久| 久久综合九色综合网站| 国产V亚洲V天堂无码久久久| 久久精品国产亚洲av瑜伽| 亚洲va久久久久| 久久线看观看精品香蕉国产| 久久青青草原精品国产软件 | 国产精品久久久久久影院| 国产高清美女一级a毛片久久w| 午夜精品久久影院蜜桃| 久久久久久九九99精品| 久久伊人色| 国内精品久久久久伊人av| 久久久久久青草大香综合精品| 亚洲精品白浆高清久久久久久| 国产免费福利体检区久久| 狠狠色综合网站久久久久久久高清 | 国产精品九九久久免费视频 | 国产精品久久久久久久app|