COM开发时使用的Win32 SDK头文件、宏定义和HRESULT
2022-02-09
213
0
Win32 SDK提供的头文件
- Unknwn.h 标准接口IUnknown和IClassFacatory的IID及接口成员函数的定义
- Wtypes.h 包含COM使用的数据结构的说明
- Objidl.h 所有标准接口的定义,既可用于C语言风格的定义,也可用于C++语言
- Comdef.h 所有标准接口及COM和OLE内部对象的CLSID
- ObjBase.h 所有的COM API函数的说明
- Ole2.h 所有经过封装的OLE辅助函数
与COM接口有关的宏
- DECLARE_INTERFACE(iface) 声明接口iface,它不从其它接口派生
- DECLARE_INTERFACE_(iface,baseiface) 声明接口iface,它从接口baseiface派生
- STDMETHOD(method) 声明接口成员函数method,函数返回类型为HRESULT
- STDMETHOD_(type,method) 声明接口成员函数method,函数返回类型为type
HRESULT类型
D30-31 | D29 | D28-16 | D15-0 |
---|---|---|---|
函数调用结果 | 是否自定义标识 | 操作来源 | 操作的状态 |
HRESULT类型的返回值反映了函数中的一些情况,定义规范如下:
类别码(D30-31)反映函数调用结果:
- 00调用成功;
- 01包含一些信息;
- 10警告;
- 11错误。
自定义标记(D29)反映结果是否为自定义标识
- 1为是
- 0则不是;
操作码(D28-16)标识结果操作来源,在Win32平台的定义如下:
#define FACILITY_NULL 0
#define FACILITY_RPC 1
#define FACILITY_DISPATCH 2
#define FACILITY_STORAGE 3
#define FACILITY_ITF 4
#define FACILITY_WIN32 7
#define FACILITY_WINDOWS 8
#define FACILITY_SSPI 9
#define FACILITY_CONTROL 10
#define FACILITY_CERT 11
#define FACILITY_INTERNET 12
操作结果码(D15-0)反映操作的状态,WinError.h定义了Win32函数所有可能返回结果。常用的如下:
S_OK 函数执行成功,其值为0 (注意,与TRUE相反)
S_FALSE 函数执行成功,其值为1
S_FAIL 函数执行失败,失败原因不确定
E_OUTOFMEMORY 函数执行失败,失败原因为内存分配不成功
E_NOTIMPL 函数执行失败,成员函数没有被实现
E_NOTINTERFACE 函数执行失败,组件没有实现指定的接口
不能简单地把返回值与S_OK和S_FALSE比较,而要用SECCEEDED和FAILED宏进行判断。
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
#define FAILED(Status) ((HRESULT)(Status)<0)
使用方法
HRESULT hr=CreateXXX();
if(SUCCEEDED(hr))
{
...
}