Java用 jni 调C# 的 DLL

第一次用到这个。网上也查了很多资料   总结下   

JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。

参考链接:https://www.jianshu.com/p/68c64845f87f

下载:下载jni4net

下载后、解压到相应目录,主要是binlib目录下的内容,我的如下图:

 

Java用 jni 调C# 的 DLL_第1张图片

Java用 jni 调C# 的 DLL_第2张图片

Java用 jni 调C# 的 DLL_第3张图片

利用vs2013 写一个   MyCSharpDemoCalc.dll

创建一个java项目    MyCalcUsageInJava.java

切换到jni4net的bin目录下,并执行命令: .\proxygen.exe "DLL所在路径" -wd "java项目根路径",执行后返回java项目的根目录下会多出下图红色框中的文件

Java用 jni 调C# 的 DLL_第4张图片

java 项目  目录会多一切文件 clr 与 jvm   如图

Java用 jni 调C# 的 DLL_第5张图片

将命令行切换到java项目的根目录下,执行命令build.cmd,java项目根目录下会编译出2个文件分别为MyCSharpDemoCalc.j4n.dll和MyCSharpDemoCalc.j4n.jar,如下图

Java用 jni 调C# 的 DLL_第6张图片

Java用 jni 调C# 的 DLL_第7张图片

 

然后将 jni4net的 lib 目录下的jar文件和dll文件copy到java项目的根目录下,将C#项目的 MyCSharpDemoCalc.dll的文件也copy到java项目的根目录下,并将MyCSharpDemoCalc.j4n.jar 和 jni4net.j-0.8.8.0.jar添加到Build Path(必须把jni4net-0.8.8.0-bin 中的lib文件下的全拷贝到java项目根目录中 与 MyCSharpDemoCalc.dll 同级),如下图

Java用 jni 调C# 的 DLL_第8张图片

eclipse - Exception in thread "main" java.lang.UnsatisfiedLinkError:******(Lnet/sf/jni4net/inj/IClrProxy;)V

原因   :

jar包引用错了、我把 jni4net.j-0.8.8.0.jar 复制放入根目录下。在java项目里引用的时候用的是 解压文件里的同名jar包   报此错

Exception in thread "main" System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。

原因 :

加载的dll文件不全 或者 损坏 复制lib 中的文件 与 重新生成 MyCSharpDemoCalc.dll 文件 

 

成功运行:

Java用 jni 调C# 的 DLL_第9张图片

你可能感兴趣的:(Java用 jni 调C# 的 DLL)