利用jacob实现java调用C#生成的DLL

本文详细介绍了如何使用Jacob库在Java中调用C#编译的DLL。首先,下载Jacob包并将其对应的dll文件放置到系统目录,然后生成签名文件。在Visual Studio中创建C#类库,使其COM可见并生成DLL及TLB文件。最后,在IntelliJ IDEA中引入jacob.jar,编写Java代码进行调用测试,成功打印出预期结果。
摘要由CSDN通过智能技术生成

利用jacob实现java调用C#生成的DLL

写在前面

  本文为学习记录,参考链接如下:
java Jacob调用VB编写的DLL(COM组件)
Java调用C# dll jacob
Java运行jacob文件中jacob-1.17.dll

一.下载Jacob包并生成签名

1.下载Jacob包

  由于官网中的项目已经进行了迁移,我这里直接在网上找了下载了以前的版本,下载链接为:jacob-1.17
  下载解压之后,将文件中的jacob-1.17-M2-x64.dll放到你电脑C:\Windows\SysWOW64文件夹中(64位系统),将文件中的jacob-1.17-M2-x86.dll放到C:\Windows\System32文件夹中(32位系统)。
在这里插入图片描述

2.生成签名

(1)以管理员身份打开Developer Command Prompt for VS 2019,并输入以下命令
key:sn -k MyKeyFire.snk
在这里插入图片描述
(2)64位系统生成的签名文件一般在C:\Windows\SysWOW64文件夹中,将其复制到其它路径下。
在这里插入图片描述

二.在IntelliJ Idea中调用C#生成的DLL

1.vs2019中创建C#类库

(1)以管理员身份打开vs2019(注意:这里一定要用管理员身份打开),创建类库,类库名为ClassLibrary1(自己命名)。
在这里插入图片描述
在这里插入图片描述
(2)在Class.cs中添加如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
    public interface IHelloWorld
    {
        string say(string s);
    }

    public class HelloWorld : IHelloWorld
    {
        public HelloWorld() { }

        public string say(string s)
        {
            return "test " + s;
        }
    }
}

在这里插入图片描述
(3)配置相关属性
右击项目名,选择属性:
1)应用程序–>程序集信息,勾选使程序集COM可见
在这里插入图片描述
在这里插入图片描述

2)生成–>目标平台选AnyCPU;生成–>勾选为COM互操作注册
在这里插入图片描述
在这里插入图片描述
3)签名–>勾选为程序集签名,选择刚刚生成的强签名文件
在这里插入图片描述
编译程序,在debug目录下会生成ClassLibrary1.dll 和ClassLibrary1.tlb
在这里插入图片描述

(4)进行注册

回到Visual 中自带命令工具,类似cmd的,进入Debug目录,运行注册命令:
regasm ClassLibrary1.dll /tlb:ClassLibrary1.tlb

gacutil -i ClassLibrary1.dll
在这里插入图片描述

3.IntelliJ Idea中引入jacob.jar包并测试

(1)创建java项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)引入jacob.jar包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加如下代码:

package com.company;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class Main {

    public static void main(String[] args) {
	// write your code here
        ActiveXComponent xl = new ActiveXComponent("Excel.Application");
        Dispatch xlo = (Dispatch)(xl.getObject());
        try {
            System.out.println("version="+xl.getProperty("Version"));
            System.out.println("version="+Dispatch.get(xlo, "Version"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            xl.invoke("Quit", new Variant[] {});
        }
    }
}

在这里插入图片描述
运行测试结果如下,表示环境配置成功。
在这里插入图片描述

4.IntelliJ Idea中调用C#生成的DLL

添加如下代码:

package com.company;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class Main {

    public static void main(String[] args) {
	// write your code here
        try{
            ActiveXComponent dotnetCom =new ActiveXComponent("ClassLibrary1.HelloWorld");
            Variant var = Dispatch.call(dotnetCom,"say","hello world");
            String str  = var.toString();
            System.out.println(str);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值