在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,javah命令也一样

首先建立两个java文件:

GetPara.java:

 package com.niiam;

 public class GetPara {
public native double getparameter();
}

这里建立了一个类,在类中定义了一个本地实现的方法getparameter(),该方法没有传入参数,传出一个固定的double类型数据,后面将由C++语言实现

建立一个Test.java进行测试:

 package com.niiam;

 public class Test {
public static void main(String[] args) {
System.loadLibrary("getpara");
GetPara para=new GetPara();
System.out.println("the height is:" + para.getparameter());
}
}

注意!!!

这里是在main方法中引入后面我们即将生成的getpara.dll链接库

也可以将该语句放在GetPara这个类里面,并用static{}进行修饰,这样,在每次实例化这个类时,都相当于实现了引入库操作。

在跟SpringBoot项目结合时要用第二种方式,切记!

进入com.niiam包所在的文件夹

javac com.niiam.GetPara.java

javac com.niiam.Test.java进行编译

javah com.niiam.GetPara.java生成.h文件com_niiam_GetPara.h

注意,这里的.h文件是包含包名的,其内部的函数声明:

JNIEXPORT jdouble JNICALL Java_com_niiam_GetPara_getparameter
  (JNIEnv *, jobject);

也是有包名存在的,与手动建立工程项目的情况不同,生成的dll文件也不同,不可等同

在vs中建立console项目,输出设置为dll

引入头文件,将jni.h  jni_md.h所在目录都引入包含目录

建立getpara.cpp文件

 #include "com_niiam_GetPara.h"

 JNIEXPORT jdouble JNICALL Java_com_niiam_GetPara_getparameter
(JNIEnv *, jobject)
{
double a = 104.06;
return a;
}

编译生成dll文件

注意由于java platform是x64的平台,因此这里生成的dll文件也必须是x64的

Eclipse下建立简单JNI程序实现返回double类型-LMLPHP

生成的dll文件放在哪里,这里有几种选择:

1、放到磁盘制定目录,将该目录添加进环境变量path中,这样,运行时即可引入。这种方式同时适合于在Eclipse中运行,以及在控制台运行java com.niiam.GetPara

2、放到项目目录中去,并将项目目录添加进java build Path中,如图:
Eclipse下建立简单JNI程序实现返回double类型-LMLPHP

或者是:

Eclipse下建立简单JNI程序实现返回double类型-LMLPHP

经测试,放到这两个地方都可以

这样直接在Eclipse中可直接运行

05-11 22:38