java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊
java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊
java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊
总体分三步走:
一、准备一个 C# 类库 (dll)
二、编写一个java 类
三、编译 java 类并打包成jar,即可执行
第一步,我的 C#类库代码
Calc.cs 代码如下:
using System;
namespace MyCSharpDemoCalc
{
public interface ICalc
{
int MySuperSmartFunctionIDontHaveInJava(int mi);
string PrintPatientInfo(patient aPatient);
}
public class DemoCalc : ICalc
{
private readonly Random r = new Random();
private patient Patient;
public DemoCalc(patient aPatient)
{
Patient = new patient();
Patient.ID = aPatient.ID;
Patient.FirstName = aPatient.FirstName;
Patient.Sex = aPatient.Sex;
}
public int MySuperSmartFunctionIDontHaveInJava(int mi)
{
return mi + r.Next();
}
public string PrintPatientInfo(patient aPatient)
{
return aPatient.ID.ToString() + " - " + aPatient.FirstName + " - " + aPatient.Sex.ToString();
}
}
}
patient.cs 代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyCSharpDemoCalc
{
public class patient
{
private int id;
private string firstname;
private bool sex;
public int ID
{
get { return id; }
set { id = value; }
}
public string FirstName
{
get { return firstname; }
set { firstname = value; }
}
public bool Sex
{
get { return sex; }
set { sex = value; }
}
}
}
编译成一个 C# 的 dll比如 MyCSharpDemoCalc.dll 即可,FrameWork用什么版本都可以
第二步、编写一个java 类,代码如下:
MyCalcUsageInJava.java
import net.sf.jni4net.Bridge;
import java.io.IOException;
import mycsharpdemocalc.DemoCalc;
import mycsharpdemocalc.ICalc;
import mycsharpdemocalc.patient;
public class MyCalcUsageInJava {
public static void main(String arsg[]) throws IOException {
Bridge.init();
//加载 C# 类库
Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("MyCSharpDemoCalc.j4n.dll"));
//实例化 C# 类库中的类 patient
patient Patient = new patient();
Patient.setID(1);
Patient.setFirstName("张三");
Patient.setSex(true);
//实例化 C# 类库中的类 DemoCalc
ICalc calc = new DemoCalc(Patient);
//调用 C# 类库中 DemoCalc 类的方法MySuperSmartFunctionIDontHaveInJava
final int result = calc.MySuperSmartFunctionIDontHaveInJava(123);
System.out.printf("执行结果 : " + result + "\r\n");
//调用 C# 类库中 DemoCalc 类的方法PrintPatientInfo
final String result1 = calc.PrintPatientInfo(Patient);
System.out.printf("执行结果 : " + result1);
}
}
第三步、编译我的java文件 MyCalcUsageInJava.java
分几小步
A)下载 jni4net http://sourceforge.net/projects/jni4net/?source=dlp 解压
B)在解压目录下建立sample目录
C)在 sample目录 中 建立 mycalc目录
D)在 sample目录 中 建立 work 子目录 将 jni4net lib目录中的 jni4net.n.w32.v20-0.8.6.0.dll、jni4net.j-0.8.6.0.jar、jni4net.n.w32.v40-0.8.6.0.dll、jni4net.n.w64.v20-0.8.6.0.dll、jni4net.n.w64.v40-0.8.6.0.dll、jni4net.n-0.8.6.0.dll 拷贝进来
E) 将编译好的 C# 类库 MyCSharpDemoCalc.dll 也拷贝到上面的 work子目录中
F)在 work目录中建立 build.cmd
@echo off
if not exist target mkdir target
if not exist target\classes mkdir target\classes
echo compile classes
javac -nowarn -d target\classes -sourcepath jvm -cp "e:\javacallc#\jni4net-0.8.6.0-bin\lib\jni4net.j-0.8.6.0.jar"; "jvm\mycsharpdemocalc\ICalc.java" "jvm\mycsharpdemocalc\ICalc_.java" "jvm\mycsharpdemocalc\DemoCalc.java" "jvm\mycsharpdemocalc\patient.java"
IF %ERRORLEVEL% NEQ 0 goto end
echo MyCSharpDemoCalc.j4n.jar
jar cvf MyCSharpDemoCalc.j4n.jar -C target\classes "mycsharpdemocalc\ICalc.class" -C target\classes "mycsharpdemocalc\ICalc_.class" -C target\classes "mycsharpdemocalc\__ICalc.class" -C target\classes "mycsharpdemocalc\DemoCalc.class" -C target\classes "mycsharpdemocalc\patient.class" > nul
IF %ERRORLEVEL% NEQ 0 goto end
echo MyCSharpDemoCalc.j4n.dll
csc /nologo /warn:0 /t:library /out:MyCSharpDemoCalc.j4n.dll /recurse:clr\*.cs /reference:"E:\javaCallC#\jni4net-0.8.6.0-bin\samples\myCSharpDemoCalc\work2\MyCSharpDemoCalc.dll" /reference:"E:\javaCallC#\jni4net-0.8.6.0-bin\lib\jni4net.n-0.8.6.0.dll"
IF %ERRORLEVEL% NEQ 0 goto end
:end
G)在mycalc目录中建一个 java ant 编译脚本 build.bat
@echo off
copy ..\..\lib\*.* work
..\..\bin\proxygen.exe work\MyCSharpDemoCalc.dll -wd work2
cd work
call build.cmd
cd ..
echo compiling usage
javac -d work\ -cp work\jni4net.j-0.8.6.0.jar;work\MyCSharpDemoCalc.j4n.jar MyCalcUsageInJava.java
G)在cmd dos窗口中运行 mycalc目录 中的 build.bat即可进行编译l了,编译效果:
H)运行编译好的 jar包看看效果:
cd work
java -cp jni4net.j-0.8.6.0.jar;MyCSharpDemoCalc.j4n.jar;. MyCalcUsageInJava
今后只需要更新 C# dll即可,java代码无需重新编译,简单吧,很爽吧!
更多详情:http://kan.weibo.com/con/3636924272047381
有任何疑问欢迎随时找我交流:QQ群:74965947, 72133568,27236303,16592133,204725117,204724518
java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊的更多相关文章
- 留学生想要搞定Reading List?只需这三步即可
听到有同学在抱怨“一本书都读不完,还怎么搞定reading list啊?”别急,小编这就来给你支招啦!你的文献阅读方法错了,读起来不仅效率低,而且无法做到熟练运用.因此,你需要以下这3步,就能搞定文献 ...
- 我能想到的最浪漫的Java网络教程之Socket,三步到位!!!
简说 如果要使用Java中的TCP/IP通过网络连接到服务器,则需要创建一个java.net.Socket对象以连接到服务器.如果使用JavaNIO,则还可以在JavaNIO中创建SocketChan ...
- c# 三步递交模式调用同一个存储过程
主要用于批量的sql操作:第一步创建中间表,第二步多次写数据到中间表,第三步 提交执行 创建三步递交的存储过程: CREATE PROC usp_testsbdj@bz int=0,@name VAR ...
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...
- vmware8~12最新版本 克隆Centos6.X 系列虚拟机网卡无法启动问题 (三步即可)
1.因工作或者学习需要,都需要在VM上克隆一台服务器,此时无论是快捷克隆(相当于快照的机体)或者完整克隆,都会碰到IP问题. 如:创建后症状:启动之后使用ifconfig,发现无ip地址,只有回环地址 ...
- java基础之轻松搞定反射
前言 java的名词太古怪.反射白话文解释,就是把一个字符串的类名,实例化,少了个new单词. 反射步骤 准备一个苹果类像这个样子. public class PingGuo { private St ...
- iview表格高度自适应只需要三步即可
1. 需要增加到table表格里的 highlight-row :height="tableHeight" ref="table" 2.在return 定义一个 ...
- 【IO流】java中文件路径(相对路径、绝对路径)相关类及方法
原文链接:https://blog.csdn.net/Activity_Time/article/details/98034409 1. URL 菜鸟教程:Java URL处理 通常推荐对http等协 ...
- 初学用记事本运行java报错:找不到或无法加载主类解决方法,部分出错解决办法
刚开始学习java的人第一个程序可能通过记事本运行,当中间可能会会出现各种错误,我在下面间可能解决出现的问题 1. java环境变量没有安装好 以我的win10系统为例,在装好相应的jdk后,环境变量 ...
随机推荐
- myeclipse的web project中使用dom4j报错java.lang.ClassNotFoundException: org.dom4j.Document
在学习微信公众平台开发的过程中,参考了微信公众平台java开发详解(工程代码+解析)中的xml解析方法,是使用dom4j来解析的. 对于java中解析xml的方法,又参考了java解析xml的几种方式 ...
- BPTT算法推导
随时间反向传播 (BackPropagation Through Time,BPTT) 符号注解: \(K\):词汇表的大小 \(T\):句子的长度 \(H\):隐藏层单元数 \(E_t\):第t个时 ...
- notepad++ 配置Python 调试环境 实用版
一. 安装python 1. 下载python 2.7版本并安装: 2. 在安装到自定义python的时候选择 add python to ptah项:
- ORACLE 10.2.01升级10.2.05 for windows 详细文档
最近要做一个数据库的升级工作,提前在自己的PC机上练习了一下,这种文档在网上很多,但是大多都是使用命令编辑脚本,其实数据库还有一个DBUA的升级工具可以使用,使升级工作方便了很多. OS环境:wind ...
- python中几个常见的“黑盒子”之 列表list
python常见的数据类型有:字符串,布尔类型,整数,浮点数,数字,日期,列表,元祖,字典.相信前面6个大家都非常的熟悉,但是对于python的列表,元祖,字典我有时候一直在想其内部的实现是怎么样子的 ...
- C# rename方法重命名文件
记得C# File类中是没有rename这个方法 所以网上很多都用的是move moveTo copy+delete等这些方法 其实以上的方法 虽然可以实现功能 但看起来总觉得很蛋疼 今天百度 突然发 ...
- 20145229&20145316《信息安全系统设计基础》实验一 开发环境的熟悉
实验封面 实验内容 本次实验使用 Redhat Linux 9.0 操作系统环境,安装 ARM-Linux 的开发库及编译器.创建一个新目录,并在其中编写 hello.c 和 Makefile 文件. ...
- java定时任务实现
在java中需要使用到定时任务是,可以通过quartz来实现.
- URAL1132_Square Root
求解方程,x^2=n (mod P). 解二次同余方程的步骤: 1.首先判断勒让德符号(n,p)是否的等于1,即n^((p-1/2)=1 (mod p)是否成立.不成立显然无解.(略) 2.任取0-( ...
- Mono for android 如何动态添加View,线程内部如何更新UI.
貌似所有设计到UI的程序原理都是一样的,子线程是不能够更新UI状态的,所以就必须使用UI自身或者第三方来更新UI. 如 在WinForm 中 就可以使用Control.Invoke(Action ac ...