如果你在winerror.h头文件中查找错误代码,会看到许多按照[功能]_[程度]_[描述]命名规范列出的HRESULT值,由组件返回的通用的HRESULT(类似E_OUTOFMEMORY)在名字中没有功能码。如 :
REGDB_E_READREGDB:
功能码 = REGDB, 指“注册表数据库(registry database)”;
程度 = E 意思是错误(error);
描述 = READREGDB 是对错误的描述(意思是不能读注册表数据库)。 S_OK: 没有功能码——通用(generic)
HRESULT;
程度=S;表示成功(success);
OK 是状态描述表示一切都好(everything''s OK)。
1. Error Lookup工具
使用VC提供的错误查找工具(Error Lookup)可以轻松查到为HRESULT内建功能码。例如,假设你在CoCreateInstance()之前忘了调用CoInitialize()。CoCreateInstance()返回的值是0x800401F0。你只要将这个值输入到错误查找工具按“Look Up”按钮,便可以看到错误信息描述“尚未调用CoInitialize”如下图所示:
2.Watch窗口查询:
另外一种查找HRESULT描述的方法是在调试器中。假设有一个HRESULT变量是hres。在Watch窗口的左边框中输入“hres,hr”,表示想要看的值,“hr”便会通知VC显示HRESULT所描述的值。如下图所示: