使用MC.EXE定义错误码

学着写点东西,过程比结论更让人印象深刻。


《Windows核心编程》第一章最后提到:我们可以向自己的模块添加错误代码,说用MC.EXE工具。用Everything搜索了下,在我这是:“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\MC.Exe”。

忽然想到,公司里基本都是bool的错误判断,就觉得确实需要这样一种方法,因为它能够让开发这样写:

bool Func() {
std::ifstream ifs("D:\\xx.csv");
if(! ifs) {
SetLastError(MSG_CANNOT_OPEN_FILE);
return false;
}
//...

}

调用GetLastError()配合FormatMessage((),就能显示你定义好的错误描述了,比如:“无法打开文件xxx,该文件可能被占用”。

然后我就搜索这方面的blog,自己摸索着写,现在记录下这个过程。


1,用nodpad++新建一个文档,保存为test.mc。

2,这个mc文件的语法,网上有很多bolg有写,但大多是翻译了MSDN的内容,所以你可以直接去MSDN看。打开MSDN(我用的是本地MSDN),搜索SeverityNames,Message Text File那个就是了。

如果你看过《windows核心编程》几遍了,那应该知道错误码的格式,还有<winerror.h>的样子。

我照网上定义了一个mc文件,大致是这样:

;//文件开始。 单行注释用  ;//

MessageIdTypedef=DWORD

SeverityNames=(
  ;//错误码第31-30位

         Success=0x0:STATUS_SEVERITY_SUCCESS ;//语法:SeverityNames=(namenumber[:name]),第一个name是在本文件用的别名,下面类似

Informational=0x1:STATUS_SEVERITY_INFORMATIONAL

Warning=0x2:STATUS_SEVERITY_WARNING

Error=0x3:STATUS_SEVERITY_ERROR

)

FacilityNames=(;//错误码第27-16位

System=0x0:FACILITY_SYSTEM

Runtime=0x2:FACILITY_RUNTIME

Stubs=0x3:FACILITY_STUBS

Io=0x4:FACILITY_IO_ERROR_CODE

)

;//语言,先在代码里用DWORD dwLangId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);调试看是多少,转16进制。

;// dwLangId = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED); 中文

LanguageNames=(English=0x409:MSG00409)

LanguageNames=(Chinese=0x804:MSG00804)


;//下面是消息定义

MessageId=0x1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值