COM编程个人学习总结

原创 2013年12月06日 09:15:44

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、

COM组件和ActiveX个人总结-14.07.01

  • 2016年06月14日 20:49
  • 1.86MB
  • 下载

ATL建立Com的相关学习和编程总结

Com的相关概念学习,网上有很多资料,
  • zedyqer
  • zedyqer
  • 2014年08月05日 15:15
  • 311

Python NLTK学习6(创建词性标注器)除特别注明外,本站所有文章均为刘杰的个人网站原创 转载请注明出处: http://www.burnelltek.com/blog/60740e24d2f

除特别注明外,本站所有文章均为刘杰的个人网站原创 转载请注明出处: http://www.burnelltek.com/blog/60740e24d2f711e6841d00163e0c0e36...
  • AMDS123
  • AMDS123
  • 2017年03月28日 20:40
  • 6015

鸡啄米:C++编程入门系列之目录和总结http://www.jizhuomi.com/software/129.html

鸡啄米的这套C++编程入门教程到上一讲--C++编程入门系列之五十(异常处理)为止,就算圆满完成了。大家学到这里应该对C++的基础知识和程序设计都有了一定的认识了,以后要做的就是多练习多积累经验了。 ...

【com编程】IE浏览器(右键扩展功能总结版)

序言:大家是不是莫名其妙,我怎么什么都搀和上两脚。搞起这个高深的COM编程来了。呵呵……这是帮同学做的一个小东西,由于以前拿这个比赛过,今天由于业务需要又用上了,所以又拉我来做一下这个。都是兄弟,放下...

COM编程实例总结(Windows服务程序)

Com编程实例 6.4 Com编程实例 微软Windows Com/Dcom技术为编写分布式应用程序提供了实用框架。Visual C++.NET中的ATL技术和属性编程技术(A...

COM学习笔记(十二):编程工作的简化

1、你可能忘记进行引用计数或者忘记释放某个组件上接口的指针。 2、即使你在该调用Release的时候调用了它,在程序中却不一定会真正调用它,因为发生异常后C++的异常处理程序不会调用Release以...

学习COM组件编程

面向对象的思想难以适应这种分布式软件模型,于是组件化程序设计思想得到了迅速的发展。 按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM编程个人学习总结
举报原因:
原因补充:

(最多只允许输入30个字)