操作码 (16-28) 标识结果操作来源,在 Windows 平台上,其定义如下:
#define FACILITY_WINDOWS 8
#define FACILITY_STORAGE 3
#define FACILITY_RPC 1
#define FACILITY_SSPI 9
#define FACILITY_WIN32 7
#define FACILITY_CONTROL 10
#define FACILITY_NULL 0
#define FACILITY_INTERNET 12
#define FACILITY_ITF 4
#define FACILITY_DISPATCH 2
#define FACILITY_CERT 11
操作结果码(0-15) 反映操作的状态,WinError.h 定义了 Win32 函数所有可能返回结果。
以下是一些经常用到的返回值和宏定义:
S_OK 函数执行成功,其值为 0 (注意,其值与 TRUE 相反)
S_FALSE 函数执行成功,其值为 1
S_FAIL 函数执行失败,失败原因不确定
E_OUTOFMEMORY 函数执行失败,失败原因为内存分配不成功
E_NOTIMPL 函数执行失败,成员函数没有被实现
E_NOTINTERFACE 函数执行失败,组件没有实现指定的接口
不能简单地把返回值与 S_OK 和 S_FALSE 比较,而要用 SECCEEDED 和 FAILED 宏进行判断。
===============================================================================
⊙ 第四章 COM 特性
===============================================================================
可重用性:包容和聚合
-------------------------------------------------------------------------------
包容模型:
组件对象在接口的实现代码中执行自身创建的另一个组件对象的接口函数(客户/服务器模型)。这个对象同时实现了两个(或更多)接口的代码。
聚合模型:
组件对象在接口的查询代码中把接口传递给自已创建的另一个对象的接口查询函数,而不实现该接口的代码。另一个对象必须实现聚合模型(也就是说,它知道自己正在被另一个组件对象聚合),以便 QueryInterface 函数能够正常运作。
在组件对象被聚合的情况下,当客户请求它所不支持的接口或者请求 IUnknown 接口时,它必须把控制交给外部对象,由外部对象决定客户程序的请求结果。
聚合模型体现了组件软件真正意义上的重用。
聚合模型实现的关键在 CoCreateInstance 函数和 IClassFactory 接口:
HRESULT CoCreateInstance(const CLSID& clsid, IUnknown *pUnknownOuter,
DWORD dwClsContext, const IID& iid, (void **)ppv);
// class IClassFactory : public IUnknown
virtual HRESULT _stdcall CreateInstance(IUnknown *pUnknownOuter,
const IID& iid, void **ppv) = 0;
其中 pUnknownOuter 参数用于指定组件对象是否被聚合。如果 pUnknownOuter 参数为 NULL,说明组件对象正常使用,否则说明被聚合使用,pUnknownOuter 是外部组件对象的接口指针。
聚合模型下的被聚合对象的引用计数成员函数也要进行特别处理。在未被聚合的情况下,可以使用一般的引用计数方法。在被聚合时,由客户调用 AddRef/Release 函数时,必须转向外部组件对象的 AddRef/Release 方法。这时,外部组件对象要控制被聚合的对象必须采用其它的引用计数接口。
-------------------------------------------------------------------------------
进程透明性 (待学)
安全性(待学)
多线程特性(待学)
-------------------------------------------------------------------------------
===============================================================================
⊙ 第五章 用 Visual C++ 开发 COM 应用
===============================================================================
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
===============================================================================
⊙ 结 束
=============================================================================== 上一页 1 2 3 4 5 6 |