OutputDebugString完美封装
来源:互联网 发布:网络大专多少钱一年 编辑:程序博客网 时间:2024/06/03 12:16
C/C++开发中经常需要输出调试信息,我们一般使用OutputDebugString
输出到DebugView或者调试器输出窗口。 OutputDebugString
原型如下:
void WINAPI OutputDebugString( LPCTSTR lpOutputString);
它只支持一个字符串参数。
在实际使用中,一般都会将其封装,支持可变参数,方便调用。
封装了2个函数TraceMsgA
和TraceMsgW
,分别支持窄字符和宽字符:
void TraceMsgW(const wchar_t *lpFormat, ...) { if(!lpFormat) return; wchar_t *pMsgBuffer = NULL; unsigned int iMsgBufCount = 0; va_list arglist; va_start(arglist, lpFormat); HRESULT hr = STRSAFE_E_INSUFFICIENT_BUFFER; while(hr == STRSAFE_E_INSUFFICIENT_BUFFER) { iMsgBufCount += 1024; if(pMsgBuffer) { free(pMsgBuffer); pMsgBuffer = NULL; } pMsgBuffer = (wchar_t*) malloc(iMsgBufCount * sizeof(wchar_t)); if(!pMsgBuffer) { break; } hr = StringCchVPrintfW(pMsgBuffer, iMsgBufCount, lpFormat, arglist); } va_end(arglist); if(hr == S_OK) { OutputDebugStringW(pMsgBuffer); } if(pMsgBuffer) { free(pMsgBuffer); pMsgBuffer = NULL; } }
void TraceMsgA(const char *lpFormat, ...) { if(!lpFormat) return; char *pMsgBuffer = NULL; unsigned int iMsgBufCount = 0; va_list arglist; va_start(arglist, lpFormat); HRESULT hr = STRSAFE_E_INSUFFICIENT_BUFFER; while(hr == STRSAFE_E_INSUFFICIENT_BUFFER) { iMsgBufCount += 1024; if(pMsgBuffer) { free(pMsgBuffer); pMsgBuffer = NULL; } pMsgBuffer = (char*) malloc(iMsgBufCount * sizeof(char)); if(!pMsgBuffer) { break; } hr = StringCchVPrintfA(pMsgBuffer, iMsgBufCount, lpFormat, arglist); } va_end(arglist); if(hr == S_OK) { OutputDebugStringA(pMsgBuffer); } if(pMsgBuffer) { free(pMsgBuffer); pMsgBuffer = NULL; } }
#if (defined UNICODE) || (defined _UNICODE)#define TraceMsg TraceMsgW#else#define TraceMsg TraceMsgA#endif
TraceMsgW
和TraceMsgA
支持可变参数(类似printf)。
它最大的优点的是缓冲区可以自动增长,不用担心缓冲区不够,输出内容被截断。
阅读全文
1 0
- OutputDebugString完美封装
- OutputDebugString 封装
- outputdebugstring函数的封装
- OutputDebugString 封装;方便格式化
- OutputDebugString
- OutputDebugString
- OutputDebugString
- OutputDebugString()
- OutputDebugString()
- OutputDebugString()
- OutputDebugString
- OutputDebugString
- OutputDebugString()
- Javascript 分页 完美封装
- Retrofit+RxJava 完美封装
- Android 6.0完美封装
- (更新)OutputDebugString函数简单封装,实现格式化打印输出(VC++)
- 闭包的完美封装
- eclipse 阿里编码规范插件安装与使用
- Kaggle 数据挖掘比赛经验分享
- react-router打包后打开路由页面空白
- C++之存储空间的动态分配和释放
- HDU 3549 Flow Problem
- OutputDebugString完美封装
- 接口 登录、注册、信息
- 梯度下降法的步长到底怎么确定?
- 设计模式(二十四)——访问者模式
- hadoop教程网站
- 最小二乘、ridge、lasso的概率论原理
- JDBC 写入mysql 中文乱码 及找不到表
- Mac下Apache修改默认站点的目录
- 剑指offer—在O(1)时间删除链表结点(18-1)