1.java文件 JavaCallC.java
package callC;
public class JavaCallC {
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("JavaCallC"); //此字符串为最后生成的javaCallC.dll的名称
}
public native int StrInIntOut(String str); //将要在C中实现的
public static void main(String[] args) {
JavaCallC javaCallC=new JavaCallC();
javaCallC.StrInIntOut("123");
//System.out.println("123");
}
}
然后编译成class文件:
D:\workplace\eclipse\functioncall\src>javac callC/JavaCallC.java
生成头文件:
D:\workplace\eclipse\functioncall\src>javah -classpath D:\workplace\eclipse\functioncall\src -d d:/ -jni callC.JavaCallC
其中java中各个命令的意思是
-classpath 用于装入类的路径
-d 输出目录
-jni 生成 JNI样式的头文件(默认)
注意到以上我们命令中指定的路径
注意到我们的命令符的执行位置是源代码目录”D:\workplace\eclipse\functioncall-new2\src”
-classpath 后面的路径是指包”callC”所在的根路径 -jni后面的路径是包名+类名
在此目录下会生成javaCallC.h的头文件,此为C的头文件,代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class callC_JavaCallC */
#ifndef _Included_callC_JavaCallC
#define _Included_callC_JavaCallC
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: callC_JavaCallC
* Method: StrInIntOut
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_callC_JavaCallC_StrInIntOut
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
然后再VS中建立project步骤如下: