来自远古的COM组件技术
了解一下远古时期的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组件技术相关推荐
- 微信团队分享:iOS版微信的高性能通用key-value组件技术实践
本文来自微信开发团队guoling的技术分享. 1.前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称 ...
- CAD组件技术分析——概述
在计算机辅助设计领域,Autodesk有着举足轻重的作用,拥有较大的影响力.因此,基于Autodesk的产品输出的图纸(dwg)或模型(rvt)有很多的读写需求:相应地,各自组件技术也都支持这些专有格 ...
- 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说
原文http://www.cnblogs.com/cyq1162/archive/2012/11/07/2756848.html 上节内容: 1:通用社区登陆组件技术分享(开源)上篇:OAuth 授权 ...
- 中国人工智能学会通讯——机器人组件技术在智能制造系统中的应用
摘要:随着工业4.0时代的到来,如何将传统工厂改造成为个性化.网络化.柔性生产的智能制造系统成为了当前的研究热点.本文从智能制造系统和智能机器人系统的相似性出发,构建了基于机器人组件技术的智能制造系统 ...
- java swing 组件技术(上)
2019独角兽企业重金招聘Python工程师标准>>> 第一次写自己的博客,明知道写得很水,还是努力去写了,希望踏出第一步之后,能有着更好的发展.这几天看了一些资料,总结了一下自己所 ...
- 途虎养车三个创始人_3个来自非常规创始人的获奖技术和产品见解
途虎养车三个创始人 by Henry 通过亨利 3个来自非常规创始人的获奖技术和产品见解 (3 Winning Technology & Product Insights from WeCha ...
- 第七章 中途岛之战--Borland和组件技术
第七章 中途岛之战--Borland和组件技术 "没有中间件技术,我们就没有未来!" Golden Gate Strategy 1996年,Borland察觉到软件技术将会开始朝中 ...
- 基于COM/DCOM组件技术的Web-based多媒体教学软件的设计
摘要] 本文通过分析COM/DCOM组件技术以及Web-based交互式多媒体教学软件的特点,提出了基于组件技术的Web-based多媒体教学软件模型,并着重讨论了COM/DCOM技术在实现Web-b ...
- 什么是 Java 组件技术?
什么是 Java 组件技术? developerWorks Java technology 专区维护了 标准 Java 组件技术 的完整词 汇表.下面是每个 Java 平台版本的组件.可选包和扩展的部 ...
最新文章
- hadoop2 自定义OutputFormat场景杂记
- 【 FPGA/IC 】addsub 的实现
- jquery-$()函数的用法及一些常用的选择器
- node mysql登录注册_图解NodeJS实现登录注册功能
- 三层聚合实验的注意事项
- kafka原理_P8架构师带你参透Kafka:设计原理、消息存储、消息消费原理等等
- php java 单点登录_php实现多站点共用session实现单点登录的方法详解
- python for循环九九乘法表_python3:使用for循环打印九九乘法表
- 分享:将XML(VS提取注释时生成)转换为Chm的一个方法
- php tp框架验证,tp5.1验证 - thinkphp5.1框架学习 - php中文网博客
- php的替换快捷键是什么,wps替换快捷键是什么
- C语言指数函数应用pow n次方
- 【嵌入式04】用寄存器HAL库完成LED流水灯程序
- 生成式对抗网络(GAN)-(Generative Adversarial Networks)算法总结(从原始GAN到....目前)
- mathcad如何创建分段函数图形
- 关于AMM解决滑点、无常损失问题的新认知 | TokenInsight
- redis-删除所有key
- 大学计算机基础p83,2011年《大学计算机基础》考试范围
- transmac使用方法_如何使用TransMac制作Mac启动盘?TransMac使用说明
- Java视频教程(最适合Java初学者的经典入门视频)_讲 师:张孝祥