一、首先是java源文件 MyJni.java
package org.mizhongqin.jni; public class MyJni { //native method public native void display(); public native double sum(double x,double y); static { System.loadLibrary("Myjnid"); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new MyJni().display(); System.out.println(new MyJni().sum(1.0, 2.0)); } }
二、生成 MyJni.class 文件, org_mizhongqin_jni_MyJni.h头文件
在D:\workspace\JAVA\src\org\mizhongqin\jni\ 下可以看到 MyJni.class 文件
在D:\workspace\JAVA\src\可以看到org_mizhongqin_jni_MyJni.h 文件,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class org_mizhongqin_jni_MyJni */ #ifndef _Included_org_mizhongqin_jni_MyJni #define _Included_org_mizhongqin_jni_MyJni #ifdef __cplusplus extern "C" { #endif /* * Class: org_mizhongqin_jni_MyJni * Method: display * Signature: ()V */ JNIEXPORT void JNICALL Java_org_mizhongqin_jni_MyJni_display (JNIEnv *, jobject); /* * Class: org_mizhongqin_jni_MyJni * Method: sum * Signature: (DD)D */ JNIEXPORT jdouble JNICALL Java_org_mizhongqin_jni_MyJni_sum (JNIEnv *, jobject, jdouble, jdouble); #ifdef __cplusplus } #endif #endif
三、然后是 C/C++源文件 MyJni_c.cpp
//必须的头文件jni.h #include <jni.h> //导入我们需要实现的本地方法 #include "org_mizhongqin_jni_MyJni.h" #include <stdio.h> JNIEXPORT void JNICALL Java_org_mizhongqin_jni_MyJni_display (JNIEnv *env, jobject obj) { printf("Hello World tom!!"); return; } JNIEXPORT jdouble JNICALL Java_org_mizhongqin_jni_MyJni_sum (JNIEnv *env, jobject obj, jdouble a, jdouble b) { return a + b; }
四、生成DLL文件
D:\Program Files\Java\jdk1.6.0_21\include\jni.h
D:\Program Files\Java\jdk1.6.0_21\include\win32\jawt_md.h
D:\Program Files\Java\jdk1.6.0_21\include\win32\jni_md.h
注意:
上面是JDK安装路径下include目录下的jni.h和 win32目录下的jawt_md.h jni_md.h 三个文件
把jni.h jawt_md.h jni_md.h 拷贝到D:\Program Files\Microsoft Visual Studio 10.0\VC\include 即Visual Studio 安装目录下的 \VC\include目录中
同时把第二步生成的org_mizhongqin_jni_MyJni.h拷贝到 org_mizhongqin_jni_MyJni.h 便于执行cl 命令,即:
结果正式生成Myjnid.dll文件
五、配置Java工程的DLL库路径 ,运行MyJni.java
运行结果: