jni是java和C、C++通信的桥梁。

 

java适合写上层的应用,C、C++适合写底层的应用。因为C、C++就是跟底层打交道的。

 

当然这里并不讨论那么多,只是我要记住这一点,我所以做的工作就是如何使用jni,把留在.java中的本地的接口,让C,C++代码实现,然后供java接口使用。是的,我想做的工作就是这样。

 

一、在命令提示符下,用javah命令 使带有native接口的java源文件生成对应的.h文件,供C++语言实现。

我想补充内容:java源文件就是用java语言编写的以.java为后缀名的代码文件。

类文件是经过javac编译过后的字节码文件。

类文件通过jvm的解释翻译为本机能够识别的机器语言。

源代码是给程序员看的,类文件是给jvm看的,机器语言是给计算机的cpu用的。

简单的执行:

Java怎么对接PLC java怎么对接c++接口_java

用javah命令生成本地接口类的头文件;

Java怎么对接PLC java怎么对接c++接口_命令提示符_02

我想说的是:javah -jni Person 和javah Person似乎是一样的,但是在实际当中最好加上“-jni”这个参数

然后就是把Person.h这个头文件添加到vs2013下去编译成dll库文件。

这里也截个图,因为有时就连这简单的几步也走不下去,真的很累的。

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_03

Java怎么对接PLC java怎么对接c++接口_源文件_04

Java怎么对接PLC java怎么对接c++接口_java_05

Java怎么对接PLC java怎么对接c++接口_命令提示符_06

Java怎么对接PLC java怎么对接c++接口_源文件_07

到这里就可以引入头文件了。把头文件拷贝到工程的目录,不然你通过工程添加文件向导,还的重新包含该文件的路径,那样又麻烦了。

Java怎么对接PLC java怎么对接c++接口_源文件_08

 

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_09

 

 

紧接着就是编译出DLL文件的过程。

Java怎么对接PLC java怎么对接c++接口_源文件_10

Java怎么对接PLC java怎么对接c++接口_命令提示符_11

然后把这个dll文件拷贝到桌面,因为Person.java文件在桌面呢,我这只是想 在命令提示符下简单实验而已。

修改Person.java源文件,加载dll文件,然后再次编译执行。

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_12

 

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_13

到这里为止,算是通过win7下的命令提示符,编译java的过程,以及C++语言实现java本地接口,java使用该接口的过程。

虽然这个简单的操作没有意义,其实我是想引入下一个话题,那就是自己在命令提示符符下面,使用javah命令,使java 原生文件生成.h文件是非常的麻烦的。能不能通过eclipse来简单配置一下,让我们自动生成.h文件更加的方便一些呢?答案肯定了!下面就继续截图。

Java怎么对接PLC java怎么对接c++接口_java_14

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_15

Java怎么对接PLC java怎么对接c++接口_命令提示符_16

由于我的建好过了,我就不再重复建了,我写这个文档的时候,实际是为了加深自己的记忆,但是真的害怕有人看到我的总结,看不懂会骂我,也为了帮助像我一样需要帮助的人,当遇到困难的时候,每有人帮助和理解,是真的很痛苦,有些东西,自己干琢磨,花费了很长的时间,抹杀了很大的信心,哎!

Java怎么对接PLC java怎么对接c++接口_源文件_17

Name:Java_JavaH

Location:D:\Program Files\Java\jdk1.7.0_67\bin\javah.exe

Working Directory:${project_loc}${system_property:file.separator}\src

Arguments:-classpath ${project_loc}${system_property:file.separator}\src -d ${project_loc}${system_property:file.separator}\jni -jni ${java_type_name}  根据实际环境修改。

 

Java怎么对接PLC java怎么对接c++接口_命令提示符_18

 

Java怎么对接PLC java怎么对接c++接口_java_19

 

Java怎么对接PLC java怎么对接c++接口_源文件_20

Java怎么对接PLC java怎么对接c++接口_java_21

到这里eclipse下native接口文件自动生成.h文件的配置完成。

效果就是

Java怎么对接PLC java怎么对接c++接口_java_22

Java怎么对接PLC java怎么对接c++接口_java_23

到这里自动的生成native所对应的.h文件算是完成了。但是还有的问题就是引入编译后的DLL的问题,网上的说法不一,但是我的实验是:把Dll放到C:\Windows\System32目录下是可以引入的,但是配置放到环境变量path下是不行的,有的人说的很多,我都懵了。

但是总是放到C:\Windows\System32这么目录下也不行的,因为这是在windows下,如过在Max os下呢,所以,引用C++编译出来的dll文件,java文件在编译的时候,加载这个dll文件,如何让它识别呢?

看截图吧!

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_24

生成dll的文件,拷贝到一个项目下的目录中,比如我把他拷贝到jni目录。

然后添加引用。。。注意了

Java怎么对接PLC java怎么对接c++接口_Java怎么对接PLC_25

Java怎么对接PLC java怎么对接c++接口_java_26

 

Java怎么对接PLC java怎么对接c++接口_命令提示符_27

这篇文档记录的是java调用C++的过程!以后的内容会慢慢补充!