□ 首先编写Java代码,如下:
![《Java平台体系》——第二章 JVM——实战:Java调用本地代码的例子](http://ww2.sinaimg.cn/mw600/94aea919jw1dnxn3iu0c9j.jpg)
□ 编译完之后,我们用JDK自带的javah(命令:javah pkg.Clas)来生成C头文件。将会生成类似如下的头文件(这部分内容我写作的假设是大家了解C/C++编程和相应的动态链接库技术,所以我不会作更多的解释,我的初衷是让了解C/C++的朋友快速了解JNI):
![《Java平台体系》——第二章 JVM——实战:Java调用本地代码的例子](http://ww2.sinaimg.cn/mw600/94aea919jw1dnxn41xoqsj.jpg)
□ 编写本地代码(我这里用C)。代码如下:
![《Java平台体系》——第二章 JVM——实战:Java调用本地代码的例子](http://ww1.sinaimg.cn/mw600/94aea919jw1dnxn4ls14ij.jpg)
□ 将上面代码在Windows下编译成pkg_Cls.dll,并且将pkg_Cls.dll放到运行Java程序的根目录。这块最容易的出问题的是导出函数名称是否符合约定,例如在编译__stdcall和__cdecl声明的函数时将会有不同的命名约定,从而导致不符合JNI的命名约定,所以可能会出现对应不上问题,解决此问题的方法可以将jni_md.h中加入如声明#define JNICALL __cdecl。
□ 运行Java类pkg.Cls。
OK,这算是一个完整的演示Java如何调用本地库的流程。