⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lvlogger.h

📁 相机传输图像程序源代码 拜耳模式(RAW格式文件)与RGB图像数据互相转换函数库
💻 H
📖 第 1 页 / 共 4 页
字号:
#ifndef LvLoggerH
#define LvLoggerH

#include <stdio.h>
#include <windows.h>

#define LOG_USE_EX_VERSION

//===========================================================================
// LOGENTERAUTO creates a class instance, which unindents when the class is
// destroyed; so there is no need to call LOGRETURN. 
//
// When using LOGENTERAUTO, create a module with:
//
// CLogIndent.H File:
//
//   #include <LvLogger.h>
//   class CLogIndent
//   {
//     public:
//       ~CLogIndent();
//   };
// 
// 
// CLogIndent.CPP file:
//
//   #include "CLogIndent.h"
//   CLogIndent::~CLogIndent()
//   {  
//     if (lvlog_LoggingEnabled())                                    
//     {                                                         
//       lvlog_EnterCriticalSection();
//       lvlog_DecIndent();               
//       lvlog_LeaveCriticalSection();  
//     }                                                         
//  }  
//===========================================================================


#if defined(__cplusplus)
#define LVLOG_DLLENTRY extern "C" 
#else
#define LVLOG_DLLENTRY 
#endif

#ifndef LOG_USE_EX_VERSION

  #ifdef _MSC_VER
    #if(_MSC_VER < 1400) // Visual C++ Version 2003 and smaller
      #define LOG_STRCPY strcpy
      #define LOG_SPRINTF sprintf
    #else // Visual C++ Version 2005 and higher
      #define LOG_STRCPY strcpy_s
      #define LOG_SPRINTF sprintf_s
    #endif
  #else // not Visual C++
    #define LOG_STRCPY strcpy
    #define LOG_SPRINTF sprintf
  #endif 

#endif 

#ifndef _WIN64
  // WIN32 platform 

  LVLOG_DLLENTRY BOOL  WINAPI lvlog_LoggingEnabled      ();
  LVLOG_DLLENTRY DWORD WINAPI lvlog_GetSenderId         (const char* pszIdString);
  LVLOG_DLLENTRY void  WINAPI lvlog_LogOutput           (DWORD dwSenderId, const char* pszTask, 
                                                         DWORD dwSeverity, int iIndentIncrement,
                                                         const char* pszMessage);
  LVLOG_DLLENTRY void  __cdecl lvlog_LogOutputEx        (DWORD dwSenderId, const char* pszTask, 
                                                         DWORD dwSeverity, int iIndentIncrement,
                                                         const char* pszFormat, ...);
  LVLOG_DLLENTRY void  WINAPI lvlog_IncIndent           ();
  LVLOG_DLLENTRY void  WINAPI lvlog_DecIndent           ();

  LVLOG_DLLENTRY void  WINAPI lvlog_CreateLogFile       (const char* pszFileName, BOOL bBuffered);
  LVLOG_DLLENTRY void  WINAPI lvlog_AppendToLogFile     (const char* pszFileName, BOOL bBuffered);
  LVLOG_DLLENTRY void  WINAPI lvlog_CloseLogFile        ();
  LVLOG_DLLENTRY DWORD WINAPI lvlog_GetLogFileSize      ();

  LVLOG_DLLENTRY void  WINAPI lvlog_LogWin32Error       (int iError, DWORD dwSenderId, const char* pszTask, 
                                                         DWORD dwSeverity);
  LVLOG_DLLENTRY void  WINAPI lvlog_EnterCriticalSection();                         
  LVLOG_DLLENTRY void  WINAPI lvlog_LeaveCriticalSection();               

  LVLOG_DLLENTRY void  WINAPI lvlog_DiscoverReceiver    ();

  LVLOG_DLLENTRY void  WINAPI lvlog_Beep                (DWORD dwFreq, DWORD dwDuration);

  //---------------------------------------------------------------------------

  #ifdef _DEBUG
    #define DEBUGLOG_ENABLED
  #endif

  #ifndef TASK_ID
    #define TASK_ID NULL  // This is dummy task ID, the application should redefine it before this include
                          // but it must be always const char* of may length of 3 chars + terminating zero
  #endif

  #define LOG_MAX_MSG_STRING 8192
  extern DWORD g_dwLogSenderId;

  // the following global vars are to be defined in one CPP module of the application
  #ifdef LOG_USE_EX_VERSION
    #define LOG_DEFINE_GLOBALS                            \
                DWORD g_dwLogSenderId=0;                  
  #else
    extern char  g_szLogMessage[LOG_MAX_MSG_STRING];
    #define LOG_DEFINE_GLOBALS                            \
                DWORD g_dwLogSenderId=0;                  \
                char  g_szLogMessage[LOG_MAX_MSG_STRING];
  #endif

  #define LOG_ENABLED lvlog_LoggingEnabled()
  #define LOG_DISCOVER lvlog_DiscoverReceiver()
  #define LOG_GET_SENDER_ID(x) g_dwLogSenderId=lvlog_GetSenderId(x) // to be called at Sender beginning

  #define LOGVOID    // use LOGRETURN(LOGVOID) in case you are in a void function

  //---------------------------------------------------------------------------

  #define LOGRETURN(x)                                                        \
                    {                                                         \
                    if (lvlog_LoggingEnabled())                               \
                      {                                                       \
                      lvlog_EnterCriticalSection();                           \
                      lvlog_DecIndent();                                      \
                      lvlog_LeaveCriticalSection();                           \
                      }                                                       \
                    return x;                                                 \
                    }

  #define _LOGRETURN                                                          \
                    {                                                         \
                    if (lvlog_LoggingEnabled())                               \
                      {                                                       \
                      lvlog_EnterCriticalSection();                           \
                      lvlog_DecIndent();                                      \
                      lvlog_LeaveCriticalSection();                           \
                      }                                                       \
                    }

  //---------------------------------------------------------------------------
  // LOGENTER increments the indent after this log, so the next logs
  // for this thread will be indented, until the LOGRETURN is called
  //---------------------------------------------------------------------------

  #define LOG_NOSYNC(LogStr)                                                  \
            {                                                                 \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutput(g_dwLogSenderId, TASK_ID, 0, 0, LogStr);        \
            }

  #define LOGWIN32LASTERROR                                                   \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
            {                                                                 \
              int iError = GetLastError();                                    \
              lvlog_EnterCriticalSection();                                   \
              lvlog_LogWin32Error(iError, g_dwLogSenderId, TASK_ID, 0);       \
              lvlog_LeaveCriticalSection();                                   \
            }                                                                 \
          }

  //---------------------------------------------------------------------------

#ifdef LOG_USE_EX_VERSION

  #define LOGENTER(LogStr)                                                    \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutput(g_dwLogSenderId, TASK_ID, 0, 1, LogStr);        \
          }

  #define LOGENTER1(LogStr,Var1)                                              \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1); \
          }

  #define LOGENTER2(LogStr,Var1,Var2)                                         \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2); \
          }

  #define LOGENTER3(LogStr,Var1,Var2,Var3)                                    \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2, Var3); \
          }

  #define LOGENTER4(LogStr,Var1,Var2,Var3,Var4)                               \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2, Var3, Var4); \
          }

  #define LOGENTER5(LogStr,Var1,Var2,Var3,Var4,Var5)                          \
          {                                                                   \
            if (lvlog_LoggingEnabled())                                       \
              lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2, Var3, Var4, Var5); \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -