portother.c
上传用户:kongshuqi
上传日期:2013-10-09
资源大小:59k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * FreeModbus Libary: Win32 Port
  3.  * Copyright (C) 2006 Christian Walter <wolti@sil.at>
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18.  *
  19.  * File: $Id: portother.c,v 1.1 2006/06/26 18:52:28 wolti Exp $
  20.  */
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include "port.h"
  24. /* ----------------------- Modbus includes ----------------------------------*/
  25. #include "mb.h"
  26. #include "mbport.h"
  27. #include "mbconfig.h"
  28. LPTSTR
  29. Error2String( DWORD dwError )
  30. {
  31.     static TCHAR    szUserBuf[512];
  32.     static LPTSTR   szErrorMsg = _T( "internal error" );
  33.     LPTSTR          lpMsgBuf = NULL;
  34.     DWORD           dwLength;
  35.     dwLength = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
  36.                               FORMAT_MESSAGE_FROM_SYSTEM,
  37.                               NULL,
  38.                               dwError,
  39.                               MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
  40.                               ( LPTSTR ) & lpMsgBuf, 0, NULL );
  41.     if( dwLength == 0 )
  42.     {
  43.         lpMsgBuf = _T( "internal error" );
  44.     }
  45.     _tcsnccpy_s( szUserBuf, _countof( szUserBuf ), lpMsgBuf, _tcslen( lpMsgBuf ) );
  46.     LocalFree( lpMsgBuf );
  47.     return szUserBuf;
  48. }
  49. void
  50. vMBPortLog( eMBPortLogLevel eLevel, const TCHAR * szModule, const TCHAR * szFmt, ... )
  51. {
  52.     TCHAR    szBuf[512];
  53.     int      i;
  54.     va_list         args;
  55.     static const LPTSTR arszLevel2Str[] =
  56.         { _T( "DEBUG" ), _T( "INFO" ), _T( "WARN" ), _T( "ERROR" ) };
  57.     i = _sntprintf_s( szBuf, _countof(szBuf) , _TRUNCATE, _T( "%s: %s: " ), 
  58.                      arszLevel2Str[eLevel], szModule );
  59.     if( i != 0 )
  60.     {
  61.         va_start( args, szFmt );
  62.         i += _vsntprintf_s( &szBuf[i], _countof(szBuf) - i, _TRUNCATE, szFmt, args );
  63.         va_end( args );
  64.     }
  65.     if( i != 0 )
  66.     {
  67.         if( eLevel == MB_LOG_DEBUG )
  68.         {
  69.             OutputDebugString( szBuf );
  70.         }
  71.         else
  72.         {
  73.             _fputts( szBuf, stderr );
  74.         }
  75.     }
  76.     
  77. }