什么是HRESULT和COM的初始化、卸载

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)为定义的一个宏,转到定义为:
#define FAILED(hr) ((HRESULT)(hr) < 0)
就是判断hr是否错误值。
(COM初始化一般放在 ::InitInstance() 中
int  CPlayWndApp::ExitInstance()
{
    
//  TODO: 在此添加专用代码和/或调用基类

    
// 关闭COM
    CoUninitialize();

    
return  CWinApp::ExitInstance();
}

COM的卸载一般放在ExitInstance()中。

你可能感兴趣的:(HRESULT)