随笔 - 132  文章 - 51  trackbacks - 0
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(7)

随笔分类

随笔档案

文章分类

文章档案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新评论

阅读排行榜

评论排行榜

#ifndef __FORMATSTRING_H__
#define __FORMATSTRING_H__

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

#pragma comment(lib, 
"shlwapi.lib")

static const int FS_BUFFER_DEFAULT = 1024;

template
<const int iBufLen>
class CFormatString
{
public:
    CFormatString( LPCTSTR szStr,  )
    
{
        va_list vl;
        va_start(vl, szStr);
        vsnprintf(szBuffer, 
sizeof(szBuffer)-1, (char*)szStr, vl);
        va_end(vl);
    }

    
operator char *()       return szBuffer; }
    
operator const char *() return szBuffer; }
protected:
    
char szBuffer[iBufLen];
}
;

template
<const int iBufLen> const char * FormatString( const char * szString,  )
{
    
if( NULL == szString )
        
return NULL;

    
int nLength = (int)strlen( szString );
    
if ( nLength <=0 )
        
return NULL;

    
static char data[iBufLen];

    va_list    va;
    va_start( va, szString );
    wvnsprintf(data, 
sizeof(data)-1, szString, va );
    va_end( va );

    
return data;
}


typedef CFormatString
<FS_BUFFER_DEFAULT> CFMSTR;
#define FMSTR FormatString<FS_BUFFER_DEFAULT>

#endif // __FORMATSTRING_H__

CFMSTR  out("输出参数语句%d..,%s,",.....);


也可以自己封装一些类或函数方便调试输出查找错误
void    setLastError(ST_Type type, 
                     
const char *message ,const char *filename ,
                     
int line , bool log_msg /*= true*/
                     
bool _debug_ /*= true*/bool _show_box /*= false*/){
    
    strncpy(last_error.message, message, THE_MAX_LASTERROR);
    strncpy(last_error.filename, filename, MAX_PATH);
    last_error.line 
= line;
    
    
char szBuffer[ THE_MAX_LASTERROR *2 ];
    sprintf(szBuffer, 
"%s (%s,%d)", last_error.message, last_error.filename, last_error.line);

    
if( log_msg ){
        note_message(szBuffer);
    }

    
    
if( _debug_ ){
        OutputDebugStringA(szBuffer);
    }

    
    
if( _show_box ){
        
switch(type){
            
case ST_ERROR:
                MessageBoxA(GetActiveWindow(), szBuffer, 
"ERROR", MB_OK|MB_ICONERROR);
            
break;
            
case ST_WARNING:
                MessageBoxA(GetActiveWindow(), szBuffer, 
"WARNING", MB_OK|MB_ICONWARNING);
            
break;
            
default:
                MessageBoxA(GetActiveWindow(), szBuffer, 
"NOTE", MB_OK);
            
break;
        }

    }

}



/**
    vsprintf(  );
    va pszMsg buffer not great 2Kb . 
*/

const char *__va( const char *pszMsg ,  ){
    
static char    msg[2][ 4096 ] = {0};
    
static int        ni = 0;

    
char*    pbuf = msg[ ni++ & 1 ];

    va_list va;
    va_start( va , pszMsg );

    size_t size 
= _vscprintf( pszMsg , va );
    
if( size > 4096 ){
        va_end( va );    
// buffer error . 
        return pbuf;
    }


    vsprintf( pbuf , pszMsg , va );
    va_end( va );

    
return pbuf;//msg[0];
}


文件查看Debug.rar
posted on 2010-09-09 12:29 风轻云淡 阅读(319) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理