HRESULT hr; S_OK:成功执行 S_FALSE:成功的返回逻辑错误 E_FAIL:一般性失败 E_NOTIMPL:方法没有实现 E_UNEXPECTED:在不准确的时间调用了方法 二、HRESULT分为三部分: 1、严重程度位:操作是成功还是失败 2、操作码:HRESULT对应于什么技术 3、信息码:在给定的严重程度和相应的技术情况下精确地结果值 为了消除名字冲突,所有的COM组件在设计的时候被分配为一个二进制名字GUID 当GUID被用来命名COM接口是,GUID被称为类ID (CLSID) 三、COM中不允许出现多继承 COM支持一种记号表示技术:“一个对象中哪些接口是可以使用的” queryInterface类似于static_cast()
COM组件中所有的字符都用OLECHAR数据类型相当于win32中的w_char_t和16为的Unicode字符,BSTR以null作为结束符的OLECHAR字符串相当于string 当把字符串作为【in】参数传入一个方法是,最好调用方法之前使用SysAllocString,在调用方法之后调用SysFreeString 当把字符串作为【out】参数输出时最好使用SysAllocString,使用完参数之后SysFreeString交给调用者调用。(如果调用者不调用会照成内存泄露) variant变体的使用 COM组件的两类命名方式 1、用CLSID 2、用文本方式(ProgID) COM对象的三种激活方式 1、绑定到类对象 2、绑定到类实例 3、绑定到来自文件的永久实例 IUnknown规则 1、QueryInterface的对称性 2、QueryInterface的传递性 3、QueryInterface的自反性 第二章 接口 1.接口作用 对于COM组件来说接口就是一切。 2.可复用应用程序架构 连接组件的接口对应用程序产生决定性作用,只要接口不变,组件可以随意更换 3.COM接口的实现 用纯虚函数来定义接口,多态来实现接口。 4.编码约定 在所有接口的名称的前面都加一个大写字母“I”表示接口,我们并不将接口定义成一个类 #define interface struct自动为公有属性 5.虚表 第三章 QueryInterface函数 为知道某个组件是否支持某个特定的接口,客户可以在运行时询问组件。 QueryInterface作用: 1.查询相关接口 2.强制装换为所需类型
来源:https://www.cnblogs.com/lailaio/p/4137493.html