http://blog.csdn.net/kenera/archive/2009/02/16/3895343.aspx
给了极大的指导。
说说我的操作过程吧
1 MyEclipse 里新建Java 项目......主要代码如下:
package com.isw2.jni; public class JNIStudy { { System.loadLibrary("testJNI");//加载DLL 文件,后缀因为windows 和linux 不同这里由系判断 } public native void display();//native 指明方法由项目以外的程序实现 public static void main(String[] args) { JNIStudy study = new JNIStudy(); study.display();//使用 } }
2 分别执行下面的命令。第二条用来获取com_isw2_jni_JNIStudy.h 文件。com_isw2_jni_JNIStudy.h在创建dll文件时会用到.
E:\work\JNIstudy\src>javac com/isw2/jni/JNIStudy.java E:\work\JNIstudy\src>javah com.isw2.jni.JNIStudy
3新建C项目.复制com_isw2_jni_JNIStudy.h.之后生成 testJNI.dll
dll.h (复制com_isw2_jni_JNIStudy.h)如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_isw2_jni_JNIStudy */ #ifndef _Included_com_isw2_jni_JNIStudy #define _Included_com_isw2_jni_JNIStudy #ifdef __cplusplus extern "C" { #endif /* * Class: com_isw2_jni_JNIStudy * Method: display * Signature: ()V */ JNIEXPORT void JNICALL Java_com_isw2_jni_JNIStudy_display (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
dllmain.c 如下:
#include <jni.h> #include "dll.h" #include <stdio.h> //注意方法名 ,来源于 dll.h JNIEXPORT void JNICALL Java_com_isw2_jni_JNIStudy_display (JNIEnv *, jobject) { printf("Hello word!\n"); printf("void com.isw2.jni.JNIStudy.display() \n"); return; }
带参数的如下:
JNIEXPORT jstring JNICALL Java_com_isw2_jni_JNIStudy_display (JNIEnv *env, jobject obj, jstring arg){ const char *nativeString = (*env)->GetStringUTFChars(env,arg, 0); printf("dllmain.c run result %s", nativeString); (*env)->ReleaseStringUTFChars(env,arg, nativeString); return arg; }
编译过程中需要jni.h 可以%JAVA_HOME%下面的 /include 中找到,加上win32中的 一起放到 D:\DEV-CPP\Include (dev-cpp 是我用的C++工具)下面.
之后 testJNI.dll 放到 C:\WINDOWS\system32 下面。再运行Java 代码结果就出来了.