#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
风轻云淡 阅读(378)
评论(0) 编辑 收藏 引用 所属分类:
C++