专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C 教程 » 什么是windows文本:windows错误码返回文本信息的封装类 »正文

什么是windows文本:windows错误码返回文本信息的封装类

来源: 发布时间:星期五, 2008年9月26日 浏览:89次 评论:0
写个实用的小类,用于输出win的错误码文本信息,因为直接使用FormatMessage确实会繁琐一点。所以将类设计成
函数对象的形式。默认以英文、方式输出,省去了自己设定语言类别的麻烦。当然自己可以设定语言类别(参看
MSDN)。


/// 声明
/**
* @author roofalison
* @date 2008-09-24-14:03
* @class windows错误码显示类
*/
#ifndef WIN_ERR_MESSAGE_H
#define WIN_ERR_MESSAGE_H

#include <windows.h>
#include <string>
using std::string;

class WinErrMessage
{
public :
WinErrMessage(
DWORD dwErrCode = 0,
DWORD dwLanguageID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) );
~WinErrMessage();
void setErrCode(DWORD dwErrCode);
void setLangID(DWORD dwLangID);
operator string();

private :
DWORD m_dwErrCode;
DWORD m_dwLanguageID;
bool m_bChanged;
string m_strErrMessage;
};

#endif


/// 实现


/**
* @author roofalison
* @date 2008-09-24-14:03
*/
#include "WinErrMessage.h"

WinErrMessage::WinErrMessage(DWORD dwErrCode, DWORD dwLanguageID)
: m_dwErrCode(dwErrCode), m_dwLanguageID(dwLanguageID), m_bChanged(true)
{
}

WinErrMessage::~WinErrMessage()
{
}

void WinErrMessage::setErrCode(DWORD dwErrCode)
{
if (m_dwErrCode != dwErrCode)
{
m_bChanged = true;
m_dwErrCode = dwErrCode;
}
}

void WinErrMessage::setLangID(DWORD dwLanguageID)
{
if (m_dwLanguageID != dwLanguageID)
{
m_bChanged = true;
m_dwLanguageID = dwLanguageID;
}
}

WinErrMessage::operator string()
{
if (m_bChanged)
{
HLOCAL hLocal = NULL;
BOOL bOK = ::FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
m_dwErrCode,
m_dwLanguageID,
(LPTSTR)&hLocal,
0,
NULL
);
m_strErrMessage = bOK ? string(static_cast<const char*>(hLocal)) : "";
if (NULL != hLocal)
{
::LocalFree(hLocal);
}
m_bChanged = false;
}
return m_strErrMessage;
}


// 示例


#include "WinErrMessage.h"
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
WinErrMessage win(0x32);
cout << static_cast<string>(win) << endl;
win.setErrCode(0x11);
cout << static_cast<string>(win) << endl;
win.setLangID( MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) );
cout << static_cast<string>(win) << endl;
string str = win;
cout << str << endl;
cout << static_cast<string>(WinErrMessage(0x11)) << endl;
return 0;
}

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: