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
  • 2297

在java中调用C#编写的dll

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

通过COM组件方式实现java调用C#写的DLL文件

注:本文转自这里 , 其中红色标注部分是自己在实际操作过程中碰到问题的解决方法  最近一段时间单位在做一个Web项目,工程师用JAVA语言,需要公用人员信息,统一用户名和密码,原有的平台中是用C...

swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

swig--在java、C#中调用c++写的DLL(以vs2012配置为例) 博客分类:  C++ Java C# JNI   1、下载、安装:  到http://ww...

Java调用C#dll全过程

Java调用C#dll全过程 Java调用默认邮件程序(Windows live mail & IBM Lotus)的同时加上附件 目录                          ...

swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

1、下载、安装:  到http://go.rritw.com/www.swig.org/download.html下载swigwin-2.0.8 版本,注意是windows版本!!。   ...
  • xwnxwn
  • xwnxwn
  • 2013年06月15日 19:59
  • 1024

通过COM组件方式实现java调用C#写的DLL文件

通过JAVA调用C#的DLL文件实现。网上资料很多,自己整合总结了一下,做个备忘。  一、C#写com组件 开发环境 VS2013 1、新建工程:TestDemo     //根据自己需要取工程名...

java调用C#的dll

.net产生的比java晚,其类库的封装在某些方面也比java更优秀,更全面。比如最近在做一个OJ,看到网上的一些做法是用 java+c++,C++用作所提交程序的测试。c++虽然好,但是他的编写比较...

JAVA通过JNI调用C#dll方法说明(包含示例)

Java调用C#的dll是通过C++作为桥梁,JNI—>C++的dll(clr方式运行)—>C#的dll   以下为本次测试的配置环境:                    系统:win7  ...

JAVA通过JNI调用C#dll的整个项目工程

  • 2017年03月29日 09:40
  • 9.06MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java调用c# dll
举报原因:
原因补充:

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