COM组件和调用

COM组件和调用COM 组件和调用 1 引言 2 实验环境 3 COM 组件介绍 4 实验过程 4 1 利用 C 创建一个 COM 组件 4 1 1 项目创建 4 1 2 配置项目属性功能快捷键合理的创建标题 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右 SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的 KaTeX 数学公式新的甘特图

1、引言

实验内容:构建一个com组件,该组件存储了10000个12位的验证码;输入一个验证码,组件返回该验证码是否正确(是否是10000个其中之一);输入一个字符串,返回一个对应的映射的验证码(映射方法自己定义);

2、实验环境

  • 操作系统:Windows 10
  • 实验工具:IntelliJ IDEA && vs2015
  • 环境:Java jdk 1.8

3、COM组件介绍

  • COM不是一种语言,而是一种标准、规范,包括一套标准API、一个标准的接口集以及COM用于支持分布式计算的网络协议。
  • COM是软件组件互相通信的一种方式,它是一种二进制和网络标准,允许任意两个组件互相通信,而不管它们在什么计算机上运行(只要计算机是相连的),不管计算机运行的什么操作系统(只要该操作系统支持COM),也不管该组件机是用什么语言编写的。
  • COM组件是遵循COM规范编写、以Win32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行二进制代码,能够满足对组件架构的所有需求。遵循COM的规范标准,组件与应用、组件与组件之间可以互操作,极其方便地建立可伸缩的应用系统。
  • COM是一种技术标准,其商业品牌则称为ActiveX。ActiveX是Microsoft遵循COM/DCOM规范而开发的用于Internet的一种对象连接与嵌入技术(OLE)。ActiveX是从复合文档技术OLE成长以来的。OLE最初发布的版本只是瞄准符合文档,但在OLE2中引入了
    COM。一般常用的COM组件有两类:ActiveX DLL和ActiveX 控件 。

4、实验过程

4.1 利用C#创建一个COM组件

4.1.1 项目创建

4.1.2 配置项目属性

4.1.3 编码实现COM组件功能

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; using System.Text.RegularExpressions; namespace ComToPython { 
    [Guid("15EE3DA3-C1E2-4D60-8FAA-CFCEDFAD0F07")] public interface IMyClass { 
    string Init(); bool VerifyCode(string input); string CodeMapping(string input); } [ClassInterface(ClassInterfaceType.None)] [Guid("214A249F-C0FE-4E71-A3F2-BB60AB8734CA")] [ProgId("ComToPython.Application")] public class ComToPython:IMyClass { 
    string[] codes = new string[10005]; public string Init() { 
    //验证码字符 char[] ch = { 
   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K','L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i','j', 'k','l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; Random random = new Random(); for(int i=0;i<10000;i++) { 
    codes[i] = ""; for (int j = 0; j < 12; j++) { 
    int position=random.Next()%62; codes[i] += ch[position]; } } return codes[0]; } public bool VerifyCode(string input) { 
    for (int i = 0; i < 10000; i++) if (input == codes[i]) return true; return false; } public string CodeMapping(string input) { 
    string pattern = @"^[A-Za-z0-9]+$"; Regex regex = new Regex(pattern); if (input.Length != 6) return "字符串长度必须为6!"; if (!regex.IsMatch(input)) return "字符串必须由数字和字母组成!"; for (int i = 0; i < 10000; i++) if (codes[i].Substring(0, 6) == input) return "成功匹配验证码:" + codes[i]; return "未能匹配到验证码!"; } } } 

4.1.4 新建两个Guid

4.1.5 生成解决方案

figure-8
到该Visual studio工程下的bin-Debug路径下可以看到生成的文件;
figure-9




4.2 使用JAVA调用COM组件

4.2.1 注册COM组件至系统

4.2.2 新建java项目,并导入jacob.jar

4.2.3 编写java调用代码并运行

代码如下:

package com.comtojava; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import java.util.Scanner; public class test { 
    / * @param args */ public static void main(String[] args) { 
    // TODO Auto-generated method stub try{ 
    ActiveXComponent dotnetCom = null; dotnetCom = new ActiveXComponent("ComToPython.Application"); Variant var = Dispatch.call(dotnetCom,"Init"); System.out.println("验证码示例如下:"); System.out.println(var.toString()); System.out.println(); System.out.println("请选择操作:1:输入验证码判断是否正确"); System.out.println("1:输入验证码判断是否正确"); System.out.println("2:输入字符串返回对应的验证码"); System.out.println("输入0退出!"); int choice; Scanner scanner=new Scanner(System.in); choice=scanner.nextInt(); while(choice!=0) { 
    switch (choice) { 
    case 1: System.out.println("请输入验证码:"); String testCode=scanner.next(); var = Dispatch.call(dotnetCom,"VerifyCode",testCode); if(var.getBoolean()) System.out.println("该验证码正确!"); else System.out.println("该验证码错误!"); break; case 2: System.out.println("请输入6位由数字和字母(大小写均可)组成的字符串:"); String code=scanner.next(); var = Dispatch.call(dotnetCom,"CodeMapping",code); System.out.println(var.toString()); } System.out.println(); System.out.println("请选择操作:"); choice=scanner.nextInt(); } } catch (Exception ex) { 
    ex.printStackTrace(); } } } 

5、遇到的问题及解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200552.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:35
下一篇 2026年3月20日 上午10:35


相关推荐

  • linux文本编辑器

    linux文本编辑器linux常见服务一.文本编辑器vivim是vi增强版vim需要安装sudoapt-get-yinstallvimvim的三种工作模式1编辑模式命令模式=&gt;编辑模式iaos按键作用i在光标当前位置插入文本a光标的下一个位置插入文本A当前行的行尾插入文本S…

    2022年6月10日
    53
  • IDEA技巧:如何根据注释生成swagger注解

    IDEA技巧:如何根据注释生成swagger注解如果你在使用 swagger 那你知道 swagger 有一个自动生成 swagger 注解的神器么

    2026年3月18日
    1
  • 计算机网络知识汇总(超详细整理)

    计算机网络知识汇总(超详细整理)为了准备期末考试,同时也是为了之后复习方便,特对计算机网络的知识进行了整理。本篇内容大部分是来源于我们老师上课的ppt。而我根据自己的理解,将老师的PPT整理成博文的形式以便大家复习查阅,同时对于一些不是很清楚的地方,我去查阅了相关资料进行补充,当然也会有部分个人看法夹带其中来帮助大家理解。

    2022年6月14日
    23
  • 联席CEO是一捧脆弱的琉璃

    联席CEO是一捧脆弱的琉璃文 财经琦观如果 将 2009 年至 2020 年这一时段定义为互联网创投领域的黄金时代 那么 献出的最后一支舞中 总会有快手的身影 传统互联网领域中 快手踩的是最后一个风口 短视频 行业里规模足够大 且结结实实的最后一场近身肉搏大战 由快手和抖音联袂奉献 投资市场的对传统互联网信心尚未崩塌之前 快手作为独角兽 最后一个上市且掀起狂欢 以及 联席 CEO 这一仓促的 蓬勃时代的 充满了 权宜 味道的特殊架构 快手也为它献上了最后谢幕 01 接力 10 月 29 日 快手在港交所发布公告 宿华

    2026年3月26日
    1
  • nano banana怎么替换头像

    nano banana怎么替换头像

    2026年3月15日
    1
  • 谷歌地图离线地图开发教程视频_谷歌地图离线

    谷歌地图离线地图开发教程视频_谷歌地图离线谷歌离线地图开发主要有两部分组成:1、获取离线地图数据;因为离线地图一般都是局域网,所以需要离线地图数据放在内网中使用;2、离线地图服务器搭建以及二次开发接口提供,离线地图是一种服务,就像我们Apache提供的WEB服务器一样,他是一种准们的地图服务:提供了包括WEB服务、TMS服务、WMTS服务等等。离线地图数据的获取:可以通过【大地图下载器】下载到。下面将一…

    2026年2月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号