vs2019 Com组件初探-简单的COM编写以及实现跨语言调用

前提条件html

  一、掌握C++基础语法java

  二、平台安装 vs2019程序员

  三、本地平台为 windows 10 1909 X64web

  四、了解vbs基础语法shell

 

本次目标编程

  一、掌握Com组件的概念及原理windows

  二、编写一个简单的以DLL形式展示的Com组件安全

  三、经过 VBS 实现跨语言调用COM网络

 

一、Com组件概念及原理app

  什么是COM:

    引用百度百科:COM component(COM组件)是微软公司为了计算机工业软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们能够开发出各类各样的功能专注的组件,而后将它们按照须要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:能够将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;能够在多个应用系统中重复利用同一个组件;能够方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使全部的程序员都可充分发挥本身的才智与专长编写组件模块。

    (我的理解:com组件就是一种标准,遵循此标准开发出来的组件则为COM组件,一样任何语言只要遵循此标准,就能够调用该组件。而com组件本质上就是二进制可执行文件,com以 DLL 或 EXE 形式发布的)

 

  什么是ATL:

 

    引用百度百科:ATL是ActiveX Template Library 的缩写,它是一套C++模板库。使用ATL可以快速地开发出高效、简洁的代码(Effective and Slim code),同时对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百科 的词条 [ 大白话容易理解 ]

 

二、编写一个简单的Com组件

  VS2019 新建基于ATL模板的项目 下一步

   

 

  设置项目名 (注意:项目名必定要记住) 而后建立

   

 

 

   设置ATL项目属性 (这里设置基于.dll 方式)

  

  这里说一下“支持组件注册”指的是 编译结束后会自动进行组件注册

  选择后点击肯定,并等待建立完成

  

  完成后会出现ComTest和ComTestPs,不用管*PS

  

 

  

 

  咱们点开ComTest而且能够看到系统自动生成的头文件和源文件

   

 

  右键ComTest 新建项->添加->新建项

  

 

 

   对 ComTest 新建 “ATL简单对象”并点击添加

  

 

   

  设置短名称为Temp 其余的会自动填充 

  ProgID 设置为 项目名+“.”+短名称 (ComTest.Temp )

  文件类型以及其余默认就好点击完成

  这里须要注意两个值

  ProgID 是以后 vbs 及其余语言 调用组件所须要提供的名称

  接口 ITemp 为以后配置 idl 所须要找到的接口名

  

   完成后会在ComTest 下添加 Temp.h 以及 Temp.cpp

  

 

 

 

   如今就能够建立咱们本身的方法

  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 

  

 

  注册成功

  

 

 

三、经过 VBS 实现跨语言调用COM

  

 

   编写vbs代码  ComTest.Temp为ATL简单对象设置的ProgID而Number为类中的方法

   

 

  保存并运行 执行成功

  

 

 

 

注意事项:

  vbs调用的com必须为IDispatch 接口

  vs2019 ATL 默认为 继承 IDispatch 接口

  Com组件必须注册后VBS才能够调用

相关文章
相关标签/搜索