#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++