COM本质论--学习笔记一--接口

简介:

1、一般通用的FACILITY_NULL HRESULT如下

S_OK:一般操作,成功执行

S_FALSE:成功地返回逻辑错误

E_FAIL:一般性失败

E_NOTIMPL:方法没有实现

E_UNEXPECTED:在不准确的时间调用了方法

2、HRESULT Method2([in] short arg1, [out, retval] short *parg2);

retval属性的含义是,相关联的物理方法参数实际上是操作的逻辑结果,在支持retval的环境中,该参数应该被映射为操作的结果。

3、[ local, object, uuid(00000000-0000-0000-c000-00000000032) ]

     interface IUnknow {

  HRESULT QueryInterface([in] REFIID riid, [out] void **ppv);

  ULONG AddRef(void);    //此方法用于通知对象“一个接口指针已经被复制了”

  ULONG Release(void);   //此方法用于通知对象“一个接口指针已经被销毁”

  }

  [local]属性禁止为该接口产生网络代码。

4、GUID的实际定义 

  const IId IID_ICalculator =

    { oxBDA4A270, 0xA1BA, OX11D0, { 0x8C, 0x2C, 0x00, 0X80, 0xC7, 0x25, 0xBA } };

5、COM禁止多种接口继承。

6、1调用AddRef方法的情形

    A1.当把一个非空接口指针写到局部变量中时。

    A2.当被调用方把一个非空接口指针写到方法或者函数的[out]或者[in,out]参数中时

    A3.当被调用方返回一个非空接口指针作为函数的实际结果时。

    A4.当把一个非空接口指针写到对象的一个数据成员中时。

  2调用Release方法的情形:p44(未完...)

   R1.在改写一个非空局部变量护着数据成员之前。

   R2.在离开非空局部变量的作用域之前。

   R3.当被调用方要改写方法或者函数的[in,out]参数,并且参数的初始值为非空时注意,[out]参数往往被假定“输入时为空值”,所以被调用方法永远也不必释放[out]参数。

   R4.在改写一个对象的非空数据成员之前。

   R5.在离开一个对象的析构函数之前,并且这时还有一个非空接口指针作为数据成员。

   S1.当调用方把一个非空接口指针通过[in]参数传递给一个函数或者方法时,既不需要AddRef,也不需要调用Release,因为在调用堆栈中,临时变量的生命周期只是“用于初始化形式参数”的表达石的生命周期的一个子集。

7.HRESULT QueryInterface( [in] REFIID riid, [out] void *ppv);

  第一个参数riid是被请求的接口实质名字。第二个参数ppv指向一个接口指针变量,当函数成功返回时,它包含客户所请求的接口指针。

8.所有的COM接口都必须被定义在IDL中。


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/09/24/2095456.html,如需转载请自行联系原作者

目录
相关文章
|
JavaScript NoSQL MongoDB
100 # mongoose 的使用
100 # mongoose 的使用
103 0
|
存储 SQL 分布式计算
MaxCompute的优势
【7月更文挑战第1天】MaxCompute的优势
214 0
|
消息中间件 物联网 定位技术
MQTT常见问题之使用 MQTT实例会报异常如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
C语言 C++
C语言可变参数表的使用
C语言可变参数表的使用
174 0
|
安全 Cloud Native Devops
GitHub Action + ACK:云原生 DevOps 落地利器
据信通院《中国 DevOps 现状调查报告(2020年)》显示,63% 的企业已经实践落地 DevOps,采用持续交付流水线打通开发、测试、部署和运维多个环节。但是依然有 20% 的企业反馈实践 DevOps 复杂,自建 Jenkins 需要自部署及插件运维,而 SaaS 化 CI/CD 工具又配置繁琐,希望有更轻量便捷的工具加速其转型落地。
GitHub Action + ACK:云原生 DevOps 落地利器
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1060 0
|
10天前
|
人工智能 运维 安全
|
1天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
242 0
|
8天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!