HRESULT 是一种简单的数据类型,通常被属性和 ATL 用作返回值。下表说明各种不同的值。头文件 winerror.h 中包含更多的值。
名称 | 说明 | 值 |
---|---|---|
S_OK | 操作成功 | 0x00000000 |
E_UNEXPECTED | 意外的失败 | 0x8000FFFF |
E_NOTIMPL | 未实现 | 0x80004001 |
E_OUTOFMEMORY | 未能分配所需的内存 | 0x8007000E |
E_INVALIDARG | 一个或多个参数无效 | 0x80070057 |
E_NOINTERFACE | 不支持此接口 | 0x80004002 |
E_POINTER | 无效指针 | 0x80004003 |
E_HANDLE | 无效句柄 | 0x80070006 |
E_ABORT | 操作已中止 | 0x80004004 |
E_FAIL | 未指定的失败 | 0x80004005 |
E_ACCESSDENIED | 一般的访问被拒绝错误 | 0x80070005 |
MSDN解释:
The HRESULT data type is a 32-bit value that is used to describe an error or warning.
typedef LONG HRESULT;
用来存放返回值信息(比如错误或成功)
一般在COM中使用,1-3位表示严重程度,中间有一些表示出错类别代码,后面的表示信息码
HRESULT的意思是Here's Result,这就是结果
返回值是个长整型
使用:
//初始化COM接口********************************
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
TRACE("ERROR - Could not initialize COM library.\n");
return FALSE;
}
//****************************************************************************
上面的FAILED(hr)为定义的一个宏,转到定义为:HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
TRACE("ERROR - Could not initialize COM library.\n");
return FALSE;
}
//****************************************************************************
#define FAILED(hr) ((HRESULT)(hr) < 0)
就是判断hr是否错误值。
(COM初始化一般放在 ::InitInstance() 中
int CPlayWndApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
//关闭COM
CoUninitialize();
return CWinApp::ExitInstance();
}
{
// TODO: 在此添加专用代码和/或调用基类
//关闭COM
CoUninitialize();
return CWinApp::ExitInstance();
}
COM的卸载一般放在ExitInstance()中。