用java写的后台方法可以提供给C#调用吗?

    最近和公司搞C#的同事联合搞了一个项目,我把我这边的数据加密之后传给C#,然后C#在对接收到的数据解密。可是问题来了,我这边用JAVA加密的数据C#的同事怎么也解密不出来,于是我就想到了可不可以将JAVA解密的方法转成C#的dll文件给到C#那边调用,于是网上搜索了下还真有,下面就说下我的具体操作。

    步骤一:到IKVM官方网站下载IKVM需要的组件 http://sourceforge.net/projects/ikvm/files/ikvm/

            我选的是“0.42.0.3”版本下面的组件,具体如下图所示:

 用java写的后台方法可以提供给C#调用吗?_第1张图片用java写的后台方法可以提供给C#调用吗?_第2张图片

步骤二:将ikvm-0.42.0.3.zip解压到一个路径,我解压到了C:\ikvm下面,然后在电脑的环境变量里面加多一个环境变量,变量名为IKVM_HOME,变量值为前面解压的目录“C:\ikvm\ikvm-0.42.0.3,然后在Path变量里面加入“;%IKVM_HOME%\bin”就可以了,截图如下:

用java写的后台方法可以提供给C#调用吗?_第3张图片用java写的后台方法可以提供给C#调用吗?_第4张图片


    步骤三:使用jar命令将已经编译后的java中Class文件进行打包,使用eclipse编译之后找到存放.class文件的classes文件夹,使用命令:“jar cvf test.jar -C classes/ .”,其中test.jar为要生成的jar包;classes/ . 为指定的当前目录classes下的文件,该文件夹包括子文件夹及class文件,生成的test.jar就在classes文件夹的同级目录,当然当前目录你也不一定要指定为classes,还可以指定为classes目录里面的子目录,截图如下:

用java写的后台方法可以提供给C#调用吗?_第5张图片

步骤四:将上面打包好的jar包转换为.dll控件,执行命令:ikvmc -out:test.dll test.jar,test.dll,其中test.dll为要生成的dll文件名,test.jar就是第三步生成的jar包,截图如下:

用java写的后台方法可以提供给C#调用吗?_第6张图片

步骤五:     截至步骤四生成dll文件的功能已经完成,接下来就是给C#端调用。C#端除了导入我们生成的dll外,还要导入的dll文件有:

%IKVM_HOME%/bin/IKVM.OpenJDK.Core.dll
%IKVM_HOME%/bin/IKVM.Runtime.dll
%IKVM_HOME%/bin/IKVM.Runtime.JNI.dll

网上说的是导入上面三个dll文件,但是我发现我还须导入:

%IKVM_HOME%/bin/IKVM.OpenJDK.Security.dll

%IKVM_HOME%/bin/IKVM.OpenJDK.Util.dll

当然那些包要导入不是绝对的,要看具体的功能代码,把dll发给C#调用发现取消那些dll在去%IKVM_HOME%/bin路径下面拷就可以了。

步骤六:如何调用生成的dll文件里面的方法呢?写法跟在java里面的写法一样。

例如java代码为:

                

                   package com.test;
                   //要调用的Java类 
                   public class Test {
                            //要调用的Java方法 
                            public String test() {
                                return "test is ok";
                            }
                  }
在C#里面调用方式为:

//引入dll文件
using com.test; 

//程序调用
Test test=new Test();
test.test();
就这样大功告成了。



你可能感兴趣的:(C#调用Java写的方法,java)