了解一下远古时期的COM组件技术。Component Object Model,即组件对象模型。

COM组件技术本质上也是一种程序框架,你可以把它理解成像C++ Thrift,Google gRPC之类的远程调用框架。与一般程序框架不同的是,COM组件可以实现跨语言间的调用。就像使用ProtoBuf语言来定义跨语言的远程调用接口一样。Windows平台下,像VB script,C#,Visual C/C++等都可以直接调用COM对象。COM分客户端(调用)和服务端(实现)两个部分,COM服务端组件一般是指.dll或.exe文件。dll文件在安装时,被注册到系统中。

COM组件的开发方式

早期,使用COMSDK开发,过程比较复杂。

后来,使用C++的MFC框架进行开发。

再后来(大约到现在),使用ATL(ActiveX Template Library,一套C++模板库)进行开发。在visual studio中,可以使用wizard向导进行代码生成。

调用方是怎样识别所调用的COM组件的?

既然COM有客户端和服务端之分,那么它们必然需要进行连接。连接时,必然需要有类似浏览器访问URL站点之类的唯一ID,用以识别目标组件/对象。事实上,COM组件是通过一个叫'CLSID'(即class id)的一串十六禁止码来进行标识的。大致过程:客户端程序通过接口将CLSID传递给操作系统,操作系统在注册信息中通过该ID来检索出对应原组件服务,之后再通过交互将具体实现功能提供给客户端。

什么是.tlb文件?

接口定义文件,二进制形式的文件,需要工具进行解析,visual studio本身就可以解析。

怎样注册com组件?

使用.NET Framework的regasm(Framework v4.0有提供)工具进行注册,命令如下:

regasm xxx.dll /tlb xxx.tlb    # 指定好完整路径。

如何查看com对象?

使用visual studio访问,工具->选择工具箱项(Toolbox),点击查看.NET Framework组件和COM组件。

使用注册表,打开HKEY_CLASSES_ROOT项即可查看。

通过注册表管理com组件

注册表HKEY_CLASSES_ROOT下面保存了注册过的各种接口库信息,HKEY_CLASSES_ROOT\TypeLib下面是通过ID来索引的类型接口库信息。

Windows系统中使用COM组件实现特殊功能

你可以使用Microsoft Office的COM组件来实现打开word,并进行编辑文档等操作。windows系统中,有很多独特的功能是通过COM组件来实现的,尤其是涉及到图形化界面或可视化控件等编程模式。

怎样调用第三方COM组件?

一般而言,第三方发布COM组件给开发者调用,会让开发者安装其提供的软件包,该软件包在安装时会将其发布的COM组件注册到系统中。.NET C#开发,可以在软件的安装目录中找到.dll的.NET组件库。如果没有,那可能会存在.tlb格式的接口定义文件。使用下面的方法转换成.dll即可。其他语言也会有类似的接口调用文件在目录中找到。

COM组件在.NET C#中的应用(.tlb到.dll的转换)

C#调用,要么有.cs源码文件,要么有.dll .NET的组件库,在代码执行时调用。

.tlb文件作为一种跨语言的接口定义文件,必然也是可以给C#调用的。通过window sdk提供的工具tlbimp进行转化。

tlbimp xxx.tlb /out:xxxLib.dll    # 注意一下命名空间,这里xxxLib就是命名空间。

tlbexp (tlb export)工具用于反向解析(.dll -> .tlb)。

微软官方文档:https://docs.microsoft.com/en-us/dotnet/framework/tools/tlbimp-exe-type-library-importer

来自远古的COM组件技术相关推荐

  1. 微信团队分享:iOS版微信的高性能通用key-value组件技术实践

    本文来自微信开发团队guoling的技术分享. 1.前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称 ...

  2. CAD组件技术分析——概述

    在计算机辅助设计领域,Autodesk有着举足轻重的作用,拥有较大的影响力.因此,基于Autodesk的产品输出的图纸(dwg)或模型(rvt)有很多的读写需求:相应地,各自组件技术也都支持这些专有格 ...

  3. 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说

    原文http://www.cnblogs.com/cyq1162/archive/2012/11/07/2756848.html 上节内容: 1:通用社区登陆组件技术分享(开源)上篇:OAuth 授权 ...

  4. 中国人工智能学会通讯——机器人组件技术在智能制造系统中的应用

    摘要:随着工业4.0时代的到来,如何将传统工厂改造成为个性化.网络化.柔性生产的智能制造系统成为了当前的研究热点.本文从智能制造系统和智能机器人系统的相似性出发,构建了基于机器人组件技术的智能制造系统 ...

  5. java swing 组件技术(上)

    2019独角兽企业重金招聘Python工程师标准>>> 第一次写自己的博客,明知道写得很水,还是努力去写了,希望踏出第一步之后,能有着更好的发展.这几天看了一些资料,总结了一下自己所 ...

  6. 途虎养车三个创始人_3个来自非常规创始人的获奖技术和产品见解

    途虎养车三个创始人 by Henry 通过亨利 3个来自非常规创始人的获奖技术和产品见解 (3 Winning Technology & Product Insights from WeCha ...

  7. 第七章 中途岛之战--Borland和组件技术

    第七章 中途岛之战--Borland和组件技术 "没有中间件技术,我们就没有未来!" Golden Gate Strategy 1996年,Borland察觉到软件技术将会开始朝中 ...

  8. 基于COM/DCOM组件技术的Web-based多媒体教学软件的设计

    摘要] 本文通过分析COM/DCOM组件技术以及Web-based交互式多媒体教学软件的特点,提出了基于组件技术的Web-based多媒体教学软件模型,并着重讨论了COM/DCOM技术在实现Web-b ...

  9. 什么是 Java 组件技术?

    什么是 Java 组件技术? developerWorks Java technology 专区维护了 标准 Java 组件技术 的完整词 汇表.下面是每个 Java 平台版本的组件.可选包和扩展的部 ...

最新文章

  1. hadoop2 自定义OutputFormat场景杂记
  2. 【 FPGA/IC 】addsub 的实现
  3. jquery-$()函数的用法及一些常用的选择器
  4. node mysql登录注册_图解NodeJS实现登录注册功能
  5. 三层聚合实验的注意事项
  6. kafka原理_P8架构师带你参透Kafka:设计原理、消息存储、消息消费原理等等
  7. php java 单点登录_php实现多站点共用session实现单点登录的方法详解
  8. python for循环九九乘法表_python3:使用for循环打印九九乘法表
  9. 分享:将XML(VS提取注释时生成)转换为Chm的一个方法
  10. php tp框架验证,tp5.1验证 - thinkphp5.1框架学习 - php中文网博客
  11. php的替换快捷键是什么,wps替换快捷键是什么
  12. C语言指数函数应用pow n次方
  13. 【嵌入式04】用寄存器HAL库完成LED流水灯程序
  14. 生成式对抗网络(GAN)-(Generative Adversarial Networks)算法总结(从原始GAN到....目前)
  15. mathcad如何创建分段函数图形
  16. 关于AMM解决滑点、无常损失问题的新认知 | TokenInsight
  17. redis-删除所有key
  18. 大学计算机基础p83,2011年《大学计算机基础》考试范围
  19. transmac使用方法_如何使用TransMac制作Mac启动盘?TransMac使用说明
  20. Java视频教程(最适合Java初学者的经典入门视频)_讲 师:张孝祥

热门文章

  1. Python 全栈系列106 -调用百度地图api计算两点间距离和行车时间
  2. 银行防尾随系统银行现状
  3. delta学习规则及梯度下降法
  4. centos7+apache配置虚拟主机
  5. 在 Python Turtle 中绘制颜色填充的形状
  6. apache下实现301永久性重定向
  7. 【计算机组成原理-chapter2】数据的表示和运算
  8. 使用正则使用*号隐藏手机号码中间的数字
  9. GetCurrentProcess()方法进程资源查询实例
  10. siege压力测试软件,压力测试工具siege