码迷,mamicode.com
首页 > 其他好文 > 详细

JNI

时间:2014-10-30 19:01:03      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   使用   java   for   sp   strong   

JNI:Java Native Interface(Java本地接口)的简写。使用这个接口,可以轻松实现java对动态链接库Dynamic Link Library(dll)文件的调用,以实现一些C/C++的功能。
实例:
1.编写Java类并声明哪些函数是由动态库实现的。
 1 public class testdll{
 2     static{
 3         System.loadLibrary("dllname");//不包含[.dll]
 4     }
 5 
 6     public native void sayHello();
 7 
 8     public static void main(String[] args){
 9         testdll test = new testdll();
10         test.sayHello();
11     }
12 } 

 2.生成头文件 testdll.h

    javah testdll
    testdll.h文件内容如下:
 1 /* DO NOT EDIT THIS FILE - it is machine generated */
 2 #include <jni.h>
 3 /* Header for class testdll */
 4 
 5 #ifndef _Included_testdll
 6 #define _Included_testdll
 7 #ifdef __cplusplus
 8 
 9 extern "C" {
10 #endif
11  /*
12  * Class: testdll
13  * Method: sayHello
14  * Signature: ()I
15  */
16 
17  JNIEXPORT void JNICALL Java_testdll_sayHello(JNIEnv *, jobject);
18 #ifdef __cplusplus
19 }
20 #endif
21 #endif

函数名有特定格式,不能随意修改,Java_class_method,而且只能由class类对象才能调用,因为JNI是通过类名来查找对应方法的。

3.生成动态库
    使用VS新建一个空的dll工程,将生成的头文件导入工程。新建.c或者.cpp,实现头文件中的函数:
1 #include <stdlib.h>
2 
3 JNIEXPORT void JNICALL Java_testdll_sayHello
4 (JNIEnv *env, jobject obj){
5      printf("hello world\n");
6 }

4.编译生成dll文件

    将jni.h、jni_md.h文件复制到VS环境的include目录下
            jni.h------------------jdk安装目录\include 
            jni_md.h-------------jdk安装目录\include\win32
    编译生成testdll.dll
 
5.执行
    将编译好的.dll文件放到path环境变量的目录下,或者放到eclipse工程的跟目录下,然后执行Java程序即可。
    也可以通过以下参数指定dll文件的目录
        java  -Djava.library.path=dll文件的目录
 

JNI

标签:style   blog   color   ar   使用   java   for   sp   strong   

原文地址:http://www.cnblogs.com/dream2003/p/4063163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!