java调用c# dll

原创 2016年08月29日 20:01:00

rt,碰到个奇怪的需求,需要用Java调用.net的dll。各种search,解决方案倒是不少,JNI,JNA,Jni4net,Javonet,Jacob…
其中jni和jna使用起来比较简单,但是都是针对c/c++的dll,如果要调c#的dll的话,据说要写一层c++的桥接,也就是说Java调c++,c++再调c#,艾玛,反正我试了下没成功- -
Jni4net我也是看了看,说实话,没看懂- -
Javonet要收费,免费试用30天,所以,你懂得- -
那么只剩Jacob了,这也是我唯一试成功的一个,官网:http://danadler.com/jacob/

步骤如下:
1,在官网上把需要的包下下来,其文件目录如下:
这里写图片描述
将jacob-1.18-x64.dll拷贝到C:\Windows\System32下(我是win7 64位)

2,制作强签名key,开始菜单中点击如下目录,打开Visual Studio Command Prompt(选择正确的版本哦):
这里写图片描述
敲入如下命令生成强命名key:
sn -k MyKeyFire.snk
其中MyKeyFire是名字,可以自己随便取。
在当前目录(System32)中找到该文件,任意复制到一个新文件夹。
sn.exe介绍请移步https://msdn.microsoft.com/zh-cn/library/k5b5tt23(VS.80).aspx

3,C#程序
vs2013新建类库输出项目TestCom:
这里写图片描述

Class1.cs中写入代码如下:

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

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

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

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

右击项目名,选择属性:
1)应用程序–>程序集信息,勾选使程序集COM可见
2)生成–>勾选为COM互操作注册
3)签名–>勾选为程序集签名,选择刚刚生成的强签名文件

编译程序,在debug目录下会生成 TestCom.dll 和TestCom.tlb

4,回到Visual Studio Command Prompt,进入Debug目录,运行注册命令:
regasm TestCom.DLL /tlb:TestCom.tlb
gacutil -i TestCom.DLL (执行这个命令需要TestCom.DLL 具有强名称)
这里写图片描述

5,Java程序
新建一个java项目,将jacob.jar包add build path,
main程序如下:

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

运行结果如下:
这里写图片描述

流程总结:
将C# dll注册到注册表中去,从而给java调用

错误分析:
“Can’t co-create object” 方法名写的不对
“Can’t get object clsid from progid” regasm注册有问题

java调用.net(c#) dll(利用jacob)

准备jdk:32位的 jacob.jar和jacob.dll(32位的) (64位的我没做成功。)常用命令: 注册:regasm xxx.dll 注销:regasm /u xxx.dll资...
  • boy317
  • boy317
  • 2016年06月15日 16:46
  • 2647

Java 调用 C# DLL

Java无法直接调用C# dll,需要通过经过桥接的方式,进行中继转发一下请求。查阅大量资料,做了大量实验,不停的调试、排错之后,期间试过jni4net,不过这个插件需要修改原有的C# DLL内容,还...
  • FYWT98
  • FYWT98
  • 2015年06月25日 17:44
  • 3212

在java中调用C#编写的dll

在java中调用C#编写的dll所遇到的问题 前言:前一段时间接了个项目,需要用到第三方提供的C#编写的dll,本身项目是java语言。由于之前用过在java中调用C语言的dll,所以开始是考...
  • almahehe
  • almahehe
  • 2017年07月28日 20:17
  • 561

jar打包成dll(C#调用java代码)

一、将已经编译后的java中Class文件进行打包;打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理; 使用的命令:jar cvf test.jar -C com/ . 其中...
  • zhang275827743
  • zhang275827743
  • 2017年09月18日 11:35
  • 438

java调用C#动态库

前言 借助于CLE,可以很容易在java中使用C#的动态库,这里通过一个简单的例子说明。使用CLE,需要预先安装http://www.srplab.com/Data/starcore_win32.2...
  • srplab1
  • srplab1
  • 2013年03月03日 18:30
  • 5996

利用jna调用使用C#的dll文件

目前所做java项目中有部分模块需要使用客户提供的dll动态库文件中封装的算法,客户提供了一个dll文件以及C#语言编写的可执行文件实例,算法具体代码未提供。之前只涉及过利用jna调用c++所生成的d...
  • l527719041
  • l527719041
  • 2017年11月29日 22:32
  • 151

Java调用C#dll全过程

Java调用C#dll全过程 Java调用默认邮件程序(Windows live mail & IBM Lotus)的同时加上附件 目录                          ...
  • truelove12358
  • truelove12358
  • 2013年08月13日 12:06
  • 4095

C#调用java的jar文件,jar文件转dll

一、将已经编译后的java中Class文件进行打包; Eclipse或myeclipse进行Export选择jar即可。或者使用命令     如:将某目录下的所有class文件夹全部进行打包处理;...
  • starandsea
  • starandsea
  • 2016年06月13日 14:52
  • 1254

C# 如何调用Java方法

关于C# 调用java的方法吗,我在网上找了很多资源,但是 用 IKVM 的居多。 于是 我也就顺着搞了一下: 关于C# 调用java的方法如下: 1.将已经编译后的java中Class文件进行打...
  • yuekunge
  • yuekunge
  • 2013年07月22日 15:20
  • 3661

java 通过Jacob调用C#函数

 java 通过Jacob调用C#函数 所用软件:VS2010,eclipse。 第一步:利用C#写dll文件。 1_1、用VS新建一个项目,选择类库,命名为FunCOM...
  • xmh19936688
  • xmh19936688
  • 2014年08月03日 09:00
  • 1196
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java调用c# dll
举报原因:
原因补充:

(最多只允许输入30个字)