• Java调用com组件之jacob


    一、背景介绍

    现有标准的 win32 com组件,有如下的参数:

    属性 值 说明
    Program IDyinhai.yh_hb_sctr
    COM ClassID
    COM ClassName
    COClass_yh_hb_sctr

    Interface TypeDual Interface
    Interface NameIyh_hb_sctr
    具有一个方法:
    yh_hb_call( string astr_jyhb, string astr_jysr, ref string astr_jysc)
    需要使用Java进行调用。

    二、采用jacob进行调用

    2.1 添加依赖

    1. <dependency>
    2. <groupId>com.hynnetgroupId>
    3. <artifactId>jacobartifactId>
    4. <version>1.18version>
    5. dependency>

     2.2 将dll文件放置在java_home\bin目录中

    1. package com.msip;
    2. import com.jacob.activeX.ActiveXComponent;
    3. import com.jacob.com.ComThread;
    4. import com.jacob.com.Dispatch;
    5. import com.jacob.com.Variant;
    6. public class TestCom {
    7. public static void main(String[] args) {
    8. ComThread.InitSTA(false);
    9. ActiveXComponent component = new ActiveXComponent("yinhai.yh_hb_sctr");
    10. try {
    11. // 获取 COM 组件的 Dispatch 对象
    12. Dispatch dispatch = (Dispatch) component.getObject();
    13. String rest = null ;
    14. String input = "{}";
    15. // 直接调用方法
    16. Variant result = Dispatch.invoke(dispatch, "yh_hb_call", Dispatch.Method,
    17. new Object[]{"1101", input,rest}, new int[1]);
    18. // 获取方法调用的结果
    19. System.out.println("Result: " + result.toString());
    20. System.out.println("rest="+rest);
    21. } finally {
    22. // 关闭 COM 组件,释放资源
    23. component.safeRelease();
    24. }
    25. }
    26. }

    三、遇到的问题

    3.1 jdk版本问题,文中的com组件是32位系统的,所以程序的jdk必须也是32位的。

    3.2 配套的dll程序必须在类路径中

    3.3 代码中的try finally语法块是必须的,否则,机会提示找不到对应的方法名。

  • 相关阅读:
    Golang Map 基本原理
    跨境出海人必备的营销指南:海外各大社交媒体的对比
    神经系统ct与mri影像解读,神经系统影像学检查
    七绝 . 秋寒
    数据库概论之MySQL表的增删改查1
    CentOS 安装HTTP代理服务器 Squid
    HarmonyOS数据管理与应用数据持久化(一)
    贪心算法概念
    2.6 用一套万能文案公式来拆解4个小红书爆文案例【玩赚小红书】
    P32 JProgressBar进度条
  • 原文地址:https://blog.csdn.net/hanxirensheng/article/details/134490792