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

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

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

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

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

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

步骤五:     截至步骤四生成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代码为:

  1.  
    package com.test;
  2.  
    //要调用的Java类
  3.  
    public class Test {
  4.  
    //要调用的Java方法
  5.  
    public String test() {
  6.  
    return "test is ok";
  7.  
    }
  8.  
    }

在C#里面调用方式为:

  1.  
    //引入dll文件
  2.  
    using com.test;
  3.  
     
  4.  
    //程序调用
  5.  
    Test test=new Test();
  6.  
    test.test();

就这样大功告成了。

用java写的后台方法可以提供给C#调用吗?(转)的更多相关文章

  1. Java——写一个求和 “方法”

    在c语言中叫做函数 撸代码: import java.math.*; import java.util.Scanner; /*导入一个 math包 * BigDecimal 精确小数 * BigInt ...

  2. C# 程序开始主要是写类和方法 的基本步骤和调用方法

    主程序的使用方式以及调用方法字段.属性.方法 using System; using System.Collections.Generic; using System.Linq; using Syst ...

  3. SpringMVC实现一个controller写多个方法

    MultiActionController与ParameterMethodNameResolver在一个Controller类中定义多个方法,并根据使用者的请求来执行当中的某个方法,相当于Struts ...

  4. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  5. [改善Java代码]覆写变长方法也循规蹈矩

    建议6:覆写变长方法也循规蹈矩 在Java中,子类覆写父类中的方法很常见,这样做既可以修正Bug也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle),我们来看 ...

  6. JAVA写JSON的三种方法,java对象转json数据

    JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...

  7. java 中使用ajax调用后台方法注意事项

    java 中使用ajax调用后台方法注意事项,后台方法一定要加@ResponseBody jQuery.validator.addMethod("checkRuleName",fu ...

  8. java 访问后台方法顺序混乱

    今天遇到后台接值顺序混乱的问题. 环境:前台ajax请求后台方法.前台页面会频繁访问这个ajax. 现象:访问后台方法的顺序混乱. 怎么发现的问题:数量小访问没有问题,今天压力测试发现的问题. 解决办 ...

  9. 8人/天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已完整开源于 Github)

    Github: https://github.com/iccb1013/Jade.Net 我们只消耗了8人/天的时间,完成了全部工作,基于我们 Jade.Net 的开源后台代码,任何小规模的后台管理系 ...

随机推荐

  1. Altium Designer绘制mark点

    mark注:我之前是按照下面的文章去制作的,由于头一次制作没有经验,不是很成功 文章是正确的 只是我的一些配置出错了: 先看一下我们的板子: 关于错误mark点,主要是周边又一圈亮锡,, 原因大概是敷 ...

  2. Android学习笔记之GridView的使用具体解释

    (1)创建布局代码例如以下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  3. swift项目第十天:网络请求工具类的封装

    import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...

  4. ocx中调用ocx

    BOOL CXXXApp::InitInstance()中加入一句AfxEnableControlContainer();

  5. [Angular] Creating an Observable Store with Rx

    The API for the store is really simple: /* set(name: string, state: any); select<T>(name: stri ...

  6. POJ2739_Sum of Consecutive Prime Numbers【筛法求素数】【枚举】

    Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19350 Ac ...

  7. 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏

    一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...

  8. swift学习第二天:swift中的基本数据类型

    一:swift基本数据类型 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int ...

  9. com.octo.captcha.service.CaptchaServiceException: Invalid ID, could not validate unexisting o

    <p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"& ...

  10. cat /proc/cpuinfo 引发的思考--CPU 物理封装-物理核心-逻辑核心-超线程之间关系

    CPU的物理封装,一个物理封装使用独立的一个CPU物理插槽,共享电源和风扇: CPU物理核心:在一个物理封装中封装了多个独立CPU核心,每一个CPU核心都有自己独立的完整硬件单元. CPU逻辑核心:一 ...