COM组件学习 com组件技术详解
liebian365 2024-11-10 11:50 19 浏览 0 评论
2024/4/17 14:44作者:jerryURL:https://www.jb51.net/article/201113.htmvs2019 Com组件初探之简单COM编写与实现跨语言调用的方法前提条件 1、掌握C++基础语法 2、平台安装 vs2019 3、本地平台为 windows 10 1909 X64 4、了解vbs基础语法本次目标 1、掌握Com组件的概念及原理 2、编写一个简单的以DLL形式展现的Com组件 3、通过 VBS 实现跨语言调用COM1、Com组件概念及原理 什么是COM: 引用百度百科:COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。 (个人理解:com组件就是一种标准,遵循此标准开发出来的组件则为COM组件,同样任何语言只要遵循此标准,就可以调用该组件。而com组件本质上就是二进制可执行文件,com以 DLL 或 EXE 形式发布的) 什么是ATL: 引用百度百科:ATL是ActiveX Template Library 的缩写,它是一套C++模板库。使用ATL能够快速地开发出高效、简洁的代码(Effective and Slimcode),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。为了方便使用,从MicrosoftVisual C++5.0版本开始,Microsoft把ATL集成到Visual C++开发环境中。1998年9月推出的Visual Studio 6.0 集成了ATL 3.0版本。ATL已经成为Microsoft标准开发工具中的一个重要成员,日益受到C++开发人员的重视。 (个人理解:ATL 就是微软发布的一个C++模板目的是为了简化COM编程) 什么是ActiveX: 引用百度百科:ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。ActiveX 控件是用于互联网的很小的程序,有时称为插件程序。它们会允许播放动画,或帮助执行任务,如在 Microsoft Update 安装安全更新,因此可以增强您的浏览体验。在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(Windows,Mac,Linux)中任意运行的程序。这个组件就是ActiveX控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和java applet功能类似。 (个人理解:ActiveX就是Com组件集合的名字,并且主要用在web方面,本质上就是COM)这里引用360百科的词条[ 大白话容易理解 ]2、编写一个简单的Com组件 VS2019 新建基于ATL模板的项目 下一步设置项目名 (注意:项目名一定要记住) 然后创建 设置ATL项目属性 (这里设置基于.dll 方式) 这里说一下“支持组件注册”指的是 编译结束后会自动进行组件注册 选择后点击确定,并等待创建完成 完成后会出现ComTest和ComTestPs,不用管PS 我们点开ComTest并且可以看到系统自动生成的头文件和源文件 现在添加一个新的ATL对象 右键ComTest 新建项->添加->新建项 对 ComTest 新建 “ATL简单对象”并点击添加 设置短名称为Temp 其他的会自动填充 ProgID 设置为 项目名+“.”+短名称 (ComTest.Temp ) 文件类型以及其他默认就好点击完成 这里需要注意两个值 ProgID 是之后 vbs 及其他语言 调用组件所需要提供的名称 接口 ITemp 为之后配置 idl 所需要找到的接口名 完成后会在ComTest 下自动添加 Temp.h 以及 Temp.cpp以及生成一个CTemp类 现在就可以创建我们自己的方法 Temp.h头文件中给CTemp添加函数声明 在 Temp.cpp 文件中实现此函数 值得一提的是 __result 必须为指针用来进行返回 return 默认为 S_OK表示执行成功 定义好方法后打开 ComTest.idl 还记得我们在创建ATL简单对象时候设置的“短名称”吗 (ITemp 自动命名规则为 I+短名称) 找到这一段 interface ITemp : IDispatch 在interface ITemp : IDispatch 里面写入 [in] 表示 输入[out] 表示输出 [retval] 表示作为返回值给外界 值得一提的是 retval 必须只能有一个 而且必须跟在out 后面以上就写好了ComTest组件的全部内容 选择生成的位数 x64快捷键 Ctrl + b 生成 dll 这里会看到生成报错 不用管他 打开我们的项目目录 可以看到第一个为生成的ComTest.dll 接下来 注册Com组件 这里注意两个文件 ComTest.dll 为 Com 组件本体 ComTest.tlb 是之后C++ 调用Com所需要包含的文件 管理员权限打开 cmd 或者 powershell 并进入到dll存在的目录 输入命令注册我们的DLL 输入后会出现 已成功 如果不成功尝试在管理员权限下去注册 3、通过 VBS 实现跨语言调用COM 编写vbs代码 ComTest.Temp为“ATL简单对象”设置的“ProgID”而Number为类中的函数名 保存并运行 执行成功 注意事项: vbs调用的com必须为IDispatch 接口 vs2019 ATL 默认为 继承 IDispatch 接口 Com组件必须注册后VBS才可以调用
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)