博客
关于我
COM技术学习总结
阅读量:145 次
发布时间:2019-02-26

本文共 1912 字,大约阅读时间需要 6 分钟。

COM技术初探

COM(Component Object Model)简介

COM(Component Object Model,组件对象模型)是一种描述如何构建动态互变组件的规范。通过这一规范,客户端和组件可以在不同的环境下进行通信,而无需关心它们是否使用相同的开发语言或运行在同一台计算机上。COM的核心目标是在不同语言和进程之间提供一套统一的接口规范。

COM的优点

  • 高度可定制性

    用户可以根据需求替换组件实现,从而实现高度的定制化。

  • 可重用性

    组件作为独立的模块,可以在多个程序中重复使用,减少代码冗余。

  • 分布式应用支持

    随着网络带宽的重要性提升,组件架构为分布式网络应用的开发提供了更简便的方式。


  • COM+技术

    COM+(Component Object Model Plus)是对COM技术的进一步优化。COM+基于COM,结合了DCOM和MTS等技术要素,将组件对象模型提升到应用层,减少了底层细节的干扰。COM+的目标是支持更复杂的分布式网络应用,提供更高的可扩展性和管理能力。

    COM+的特点

  • 异步通信

    COM+通过队列服务实现了真正的异步通信,允许客户端和组件在不同时间点协同工作。

  • 事件服务

    提供灵活的事件机制,简化了事件处理流程。

  • 负载平衡

    动态负载平衡和内存数据库等服务为应用提供了更强的扩展性。

  • 可管理性

    COM+使得软件维护成本降低,用户和开发者可以更轻松地管理和配置应用程序。


  • COM技术的实现

    从C++到DLL再到COM

  • C++类库的局限性

    在C++类库中,类的实现和接口紧密耦合,难以实现二进制组件化。例如,一个类库的代码会被多个应用程序重复编译,导致内存占用增加,维护成本上升。

  • DLL(动态链接库)的引入

    通过将C++类库封装为DLL,可以减少重复编译。然而,这种方式仍然无法实现接口与实现的分离。

  • COM的出现

    COM通过将接口从实现中分离,提供了二进制组件化的解决方案。每个组件都有自己的接口定义,实现与接口解耦。


  • COM基础知识

  • HRESULT返回值

    COM要求所有方法返回一个HRESULT类型的错误码,表示操作的成功或失败。

    • S_OK表示成功。
    • S_FALSE表示失败或无权访问。
    • 负数表示严重错误。
  • IDL(接口定义语言)

    COM组件需要一个接口定义文件,扩展名为.idl。通过IDL文件,可以定义接口的细节,包括接口方法和GUID(全局唯一标识符)。

    • IUnknown是COM中最基础的接口,用于引用计数管理。
  • IUnkown接口

    IUnkown接口定义了三个方法:QueryInterface、AddRef和Release。

    • QueryInterface用于查询组件是否实现特定接口。
    • AddRef和Release管理对象引用计数,确保组件的生命周期管理。

  • COM组件的实现步骤

    1. 创建一个COM组件

  • 选择开发环境

    通常使用Visual C++或Delphi进行COM组件开发。

  • 定义接口文件

    使用IDL文件定义接口,例如:

    interface IMyInterface : public IUnknown{    [interface] HRESULT MyMethod(int Param);}
  • 实现组件类

    在C++中,实现接口类并继承IUnknown。

    class MyImpl : public IMyInterface{public:    ULONG AddRef();    HRESULT MyMethod(int Param);    ULONG Release();};
  • 注册组件

    在DLL中注册组件,通常通过DllRegisterServer和DllUnregisterServer函数实现。


  • COM的实际应用

    客户端使用示例

    // 客户端代码ISimpleMath *pMath = new CMath();HRESULT hr = pMath->QueryInterface(IID_ISimpleMath, (void **)&pSimpleMath);if (SUCCEEDED(hr)) {    int result = pSimpleMath->Add(10, 20);    cout << "10 + 20 = " << result << endl;}pMath->Release();pSimpleMath->Release();

    COM技术的意义

    COM技术通过接口化设计和二进制组件化,为分布式系统和多语言支持提供了坚实的基础。尽管在现代开发中,COM技术已被替代,但它对后续的COM+和.NET框架奠定了重要基础。

    转载地址:http://ytfy.baihongyu.com/

    你可能感兴趣的文章
    Python 交互式数据可视化详解
    查看>>
    python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>