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

COM是微软的组件对象模型,因其二进制代码共享特性,具备高开发性、维护性和可移植性,在Windows平台上广泛应用。COM组件通过引用计数管理内存,确保对象在不再使用时及时释放资源。IUnknown接口的AddRef和Release方法用于增加和减少引用计数。智能指针是C++中避免COM接口指针管理风险的有效工具。手动注册COM组件可以通过regsvr32命令完成,注册信息存储在注册表中。
摘要由CSDN通过智能技术生成

1.com 组件对象模型

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

2.com组件的优点

  • 采用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 *

7.COM组件的注册

我们目前用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接口时,得小心翼翼的,用智能指针

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: COMComponent Object Model)是微软公司开发的一种面向对象的组件对象模型。它是一种可用于编写和调用应用程序的平台和语言无关的技术,具有广泛的应用。COM可以使不同的软件组件相互通信和交互,实现代码的复用和模块化开发。COM技术内幕-微软组件对象模型 PDF是一本关于COM技术的书籍,通过介绍COM技术的原理、架构和编程接口,帮助读者深入理解COM技术的内部工作原理和应用方法。 COM技术内幕-微软组件对象模型 PDF可以帮助读者了解COM的基本概念和核心概念,如COM对象、接口、类工厂等。它还介绍了COM对象的生命周期和内存管理,以及如何使用COM接口进行对象之间的通信和交互。此外,该书还讲解了COM的线程模型、注册表、组件的版本管理和卸载等相关内容。 通过阅读COM技术内幕-微软组件对象模型 PDF,读者可以深入了解COM技术的实现细节和应用技巧,掌握COM的高级编程技巧,提高软件开发和设计的效率。这本书适合有一定编程基础的读者阅读,特别是那些对COM技术感兴趣并希望进一步学习和应用的人员。 总之,COM技术内幕-微软组件对象模型 PDF是一本关于COM技术的详细指南和参考书,它可以帮助读者深入理解COM技术的内部工作原理和应用方法,提高软件开发和设计的技能水平。 ### 回答2: COM技术内幕-微软组件对象模型(Component Object Model,简称COM)是一种面向对象的软件组件模型,由微软公司开发,用于实现软件组件的互操作性。它在Windows操作系统中被广泛应用,为开发人员提供了一种在不同平台和编程语言之间交互的标准接口。 COM技术内幕-微软组件对象模型的PDF是一本介绍COM技术的相关文档。它详细讲解了COM的原理、架构、编程模型和相关的API,介绍了COM组件的开发、注册和部署等方面的知识。 这本PDF不仅适合初学者学习COM技术,也适合有一定基础的开发人员进一步深入了解COM的内部实现和高级特性。它可以帮助开发人员理解COM组件的生命周期、接口的多态性、对象模型的设计原则等重要概念。 此外,这本PDF还介绍了COM组件与.NET和Java等现代开发平台之间的互操作性。它解释了如何在COM组件和这些平台之间进行数据交换、方法调用等操作,为开发人员提供了实现跨平台开发的方法和技巧。 总之,COM技术内幕-微软组件对象模型的PDF对于想要深入理解和应用COM技术的开发人员来说是一本很有价值的参考资料。通过学习这本PDF,开发人员可以更加高效地开发和管理COM组件,提高软件的可复用性和扩展性。 ### 回答3: COMComponent Object Model)是微软公司开发的一种软件组件技术,用于实现软件的组件化开发和复用。COM技术内幕-微软组件对象模型(COM Internals - Microsoft Component Object Model)是一本介绍COM技术的PDF文件。 该PDF文件主要讲解了COM的原理、架构和用法。首先,它介绍了COM的产生背景和发展历程,让读者了解COM的起源和重要性。然后,它详细解释了COM的基本原理和核心概念,如COM对象、接口、类工厂等,帮助读者理解COM组件的结构和运作方式。 接着,该文件介绍了COM的编程模型,即如何使用COM来开发软件。它详细解释了COM的接口定义语言(IDL)和对象创建的过程,以及如何在不同编程语言(如C++、C#等)中使用COM进行开发。 此外,该PDF文件还讨论了COM的生命周期管理、线程安全性和版本控制等重要概念。它指导开发者如何正确地创建、使用和释放COM对象,并提供了一些常见问题的解决方法。 最后,该文件还介绍了COM的扩展技术和相关标准,如COM+、DCOMCOM浏览器等。它展示了COM在分布式系统、Web服务和企业应用中的应用场景,帮助读者拓展对COM技术的应用范围。 总之,COM技术内幕-微软组件对象模型是一本全面介绍COM技术的PDF文件,适合想要深入了解并应用COM技术的开发者和技术爱好者阅读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce-li__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值