JNI(1)
java程序写的没有太大难度:
public class HelloJNI { /** * 走向内力的第一步 * @param args */ static{ System.loadLibrary("JNItest"); } public static void main(String[] args) { new HelloJNI().sayHello(); //System.out.println(System.getProperty("java.library.path")); } public native void sayHello(); }
主要问题出在本地代码C的实现以及环境变量的配置上:
1.本地代码C的实现:在VC++6.0下新建 "Win32 Dynamic-Link Library" 工程,在工程目录下加入用以下javah命令(使用此命令时先到java工程的class目录下)生成的头文件:
javah com.zhanglei.jniDemo.HelloJNI
加入jni.h以及jni_md.h头文件,这两个文件都在jdk的相应目录下(或者把这两个文件放在VC++6.0的include目录下,一劳永逸),然后主要代码如下:
#include "stdafx.h" #include "com_XXX_jniDemo_HelloJNI.h" JNIEXPORT void JNICALL Java_com_zhanglei_jniDemo_HelloJNI_sayHello (JNIEnv *, jobject) { printf("helloJNI"); return; }
然后把VC++6.0编译生成的Dll文件放到PATH路径下,在java工程中 System.out.println(System.getProperty("java.library.path")) 可以得到当前可以将这个文件放在哪个目录下;或者是设置环境变量PATH为该DLL文件所在路径,但是人品问题,一直没搞定,哎...
最后,在Eclipse中编译java工程,成功打印出:helloJNI