COM编程个人学习总结

1、COM组件的3个函数,QueryInterface()AddRef()Release(),它们组成一个接口,叫"IUnknown"接口。任何接口,其实都包含了 IUnknown 接口。且在任何接口上,调用虚函数表中的第一个函数,其实就是调用 QueryInterface()函数,就得到你想要的另外一个接口指针。这个性质叫“接口的传递性

HRESULT QueryInterface( REFIID iid, void** ppvObject ) 通过此函数来查询某个组件是否支持某个特定的接口,其中iid是传入的已知接口ID,若支持QueryInterface将返回一个指向这些接口的指针,不支持返回值将是一个失败结果。

 

2、接口声明的独立性:COM不提供类似C/C++的声明头文件,而是提供一个叫类型库(TLB)的声明。每个语言的IDE环境自己去根据TLB生成自己语言需要的包装。

 

3、判断调用COM函数成功与否的标准步骤:  <COM中一般的函数返回值都是HRESULT型>

HRESULT hr = 调用组件函数;

if( SUCCEEDED( hr ) ){...} // 如果成功

......

if( FAILED( hr ) ){...} // 如果失败

 

4、COM中的字符串类型:COM为了支持分布式系统,其字符串类型的内存格式与普通字符串类型不同,而是使用了BSTR这种结构<basic里的str>。它首先是用来UNICODE的UTF16基本格式,然后在字符串的开头使用4个字节的固定空间表示字符串长度,字符串的末尾使用两个NULL字节表示字符串结束。C/C++中有一系列的这两种字符串的转换函数,在我转载的BLOG中有详细讲。

 

5、VARIANT数据类型,这种数据类型具有“跨语言的特性”,同时他可以存储任意类型的数据。从C语言的角度来讲,VARIANT 其实是一个结构,结构中用一个域(vt)表示------该变量到底表示的是什么类型数据,同时真正的数据则存贮在 union 空间中。

 

6、基本原则:

  1、启动组件得到一个接口指针(Interface)后,不要调用AddRef()。因为系统知道你得到了一个指针,所以它已经帮你调用了AddRef()函数;
  2、通过QueryInterface()得到另一个接口指针后,不要调用AddRef()。因为......和上面的道理一样;
  3、当你把接口指针赋值给(保存到)另一个变量中的时候,请调用AddRef();
  4、当不需要再使用接口指针的时候,务必执行Release()释放;
  5、当使用智能指针的时候,可以省略指针的维护工作;

7、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值