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
不能简单地把返回值与 S_OK 和 S_FAIL 比较,而要用 SUCCEEDED 和 FAILED  宏进行判断。

HRESULT 其实是一个双字节的值,其最高位(bit)如果是0表示成功,1表示错误。具体参见 MSDN 之"Structure of COM Error Codes"说明。我们在程序中如果需要判断返回值,则可以使用比较运算符号;switch开关语句;也可以使用VC提供的宏: HRESULT hr = 调用【com组件】函数,用以判断com接口方法的返回值; 

if( SUCCEEDED( hr ) ){...} // 如果成功
......
if( FAILED( hr ) ){...} // 如果失败
组件:
简而言之,组件就是 对象。 C++ Builder中叫组件, Delphi中叫部件,而在Visual BASIC中叫 控件。
组件是对数据和方法的简单 封装。C++ Builder中,一个组件就是一个从TComponent派生出来的特定 对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。
对象管理小组(Object Management Group,OMG)的“ 建模语言规范”中将组件定义为:“系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的 接口。一个组件代表一个系统中实现的物理部分,包括 软件代码( 源代码, 二进制代码, 可执行代码)或者一些类似内容,如 脚本或者命令 文件。”
在COM中接口就是一切,对客户说组件就是接口集,客户只能通过接口和组件打交道。
组件必须满足两个条件:第一,组件必须动态链接(dll);第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。
COM组件由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。遵循COM规范编写出来的组件将能够满足对组件架构的所有要求。COM组件可以给应用程序、操作系统以及其他组件提供服务;自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序;COM组件可以动态的插入或卸出应用。


你可能感兴趣的:(COM组件简介)