200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Windows核心技术--com组件实用入门教程

Windows核心技术--com组件实用入门教程

时间:2020-07-15 17:17:56

相关推荐

Windows核心技术--com组件实用入门教程

组件对象模型

com是微软组件对象模型的简称。由于com具有二进制代码共享的

特性,所以它具备了高可开发性,高度可维护性和高度的可移植性(跨开发语言),以至于在windows上面的诸多应用软件采用了com来做整体的架构。比如微软的DirectX等。com虽然流行于2000-之间,由于它的普及面之广,应用软件种类之繁多再加上windows对其默认支持很好,开发出来的软件无需依赖其他的开发包,所以被很多软件公司采用至今

组件的优点

采用com组件架构我们的软件,会使我们更方便地进行模块划分,而且各模块独立性高,耦合度低,从而更方便地进行开发任务的分工。(开发性)

采用com组件架构我们的软件,会使我们更方便地维护,升级软件,因为我们可以很方便地直接用新模块替换旧模块,而不影响软件的其他功能(维护性)

采用com组件架构我们的软件,可以使我们已编写好的功能模块可以很方便地移植到其他平台,如从c++的MFC平台移植到C#的WinForm平台.因为COM组件是跨应用的,可以被C++调用也可以被C#调用(移植性)

3.内存资源何时释放

在主函数的最后面执行delete pA确实是一个可行的办法,但却不是好办法,因为这样子最终是释放了pA的内存资源,

不过却不是"及时"(在pA所指的组件不用时)地释放内存资源,如果一个程序,所有的资源在不用时都没有及时释放,这个程序在运行中所占用的内存将是巨大的,如何解决这个问题呢?这就需要引用计数技术

4.引用计数的原理

引用计数计数就是用来管理对象生命期的一种计数

对象O可能同时被外界A,外界B,外界C引用。也就是说外界A,外界B,外界C可能都在使用对象O。

每次当对象被外界引用时,计数器就自增1

每次当对象不用对象时,计数器就自减1

在计数值为零时,对象本身执行delete this,销毁自己的资源,

引用计数使得对象通过计数能够知道何时对象不再被使用,然后及时地删除自身所占的内存资源

IUnknown接口的AddRef与Release就是引用计数的实现方法

5.AddRef与Release的实现与使用

AddRef,使组件的引用计数自增1

在返回之前调用AddRef,比如组件的构造函数,QueryInterface函数

在赋值之后调用AddRef,比如pIX3=pIX2,这时需要pIX3->AddRef()

Release,使组件引用计数自减1,如果引用计数为零,

释放本身的内存资源

在接口使用完之后,调用Release

查看Section2Demo1,关于AddRef与Release的使用,

并适当注释一些AddRef或Release查看CA的析构函数是否运行或会不会出现对无效指针(野指针)的操作

6.引用计数的优化

常用的com数据类型

INT

INT *

UINT *

LONG

LONG *

ULONG

ULONG *

FLOAT

FLOAT *

DOUBLE

DOUBLE *

VARIANT_BOOL

VARIANT_BOOL *

组件的注册

我们目前用ATL制作出来的简单对象是*.dll的形式

我们在上一讲中能调用这个dll,是因为我们的Visual

Studio在编译生成这个dll时,对它进行了注册

com组件的注册

手动注册

cmd命令黑窗

regsvr32 路径…dll

提示注册成功

…中的DllRegisterServer成功

com组件被注册后,注册信息在哪里?

打开注册表编辑器

用cmd黑窗打开regedit(注册表)

打开计算机\HKEY_CLASSES_ROOT\CLSID

搜素我们组件的clsid,比如我这边是F652…

我们从PropID项中,看到了我们com组件的PropID

PropID是指程序员给某个CLSID指定一个程序员易记

的名称,某些计算机语言是通过PropID来标识组件,

PropID的命名规则:

..

注册表的项

8.智能指针的简介

c++在调用com接口指针时是很危险的,因为使用过程

需要每一个使用都严格并且正确地调用AddRef()与Release()方法,一旦出现问题,就会造成对象不能被正常释放或者对象被重复删除

所以c++程序员使用com接口时,得小心翼翼的,用智能指针

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。