精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Java>>源码收藏>>(技巧提示)JNI快速入门

主题:(技巧提示)JNI快速入门
发信人: lega(摇滚java)
整理人: zjxyz(2002-09-10 10:22:17), 站内信件

发信站: BBS 水木清华站 (Tue Nov 10 22:54:10 1998) 
  
JNI(JAVA NATIVE INTERFACE,JAVA本地接口) 
是JAVA在特殊情况下,(如强调效率或与平台 
有关的功能)必须调用本地方法时的接口规则。 
    下面是一个无限简单的样例: 
程序功能:用JAVA调用本地用VC写的一个函数, 
该函数输入一个整数,输出整数的平方加3。 
    1、首先,建立自己的JAVA主程序jnitest.java 
jnitest.java : 
  
import java.lang.*; 
public class jnitest { 
   public static void main(String args[]) { 
        jnitest Mytest = new jnitest(); 
        int a = 4; 
        int b = Mytest.Cal(a); 
        System.out.println("The result is : "+b); 
   } 
  
   public native int Cal(int i) ; 
  
   static { 
      System.loadLibrary("MyCal"); 
           // MyCal 是本地方法的动态链接库的名称 
   } 

  
   2、然后javac jnitest.java ,生成.CLASS文件。 
   3、然后javah -jni jnitest , 生成jnitest.h。 
编辑jnitest.h ,找到JAVA定义的本地方法的原型: 
  
   JNIEXPORT jint JNICALL Java_jnitest_Cal 
      (JNIEnv *, jobject, jint) 
  
   4、根据函数原形,编写C函数如下: 
#include "jni.h" 
#include "jnitest.h" 
  
JNIEXPORT jint JNICALL Java_jnitest_Cal 
                 (JNIEnv *env, jobject obj, jint a) 


        return ( a * a + 3) ; 

  
   注意必须INCLUDE 生成的jnitest.h和JAVA自带的jni.h 
用VC编译之,生成MyCal.dll。 
   5、将MyCal.dll拷贝到jnitest所在目录,运行 : 
   java jnitest 
  
   结果为:The result is :19 
   OK !!! 
   有关JNI还有很多复杂的问题,大家可以参阅JAVA文档。 
  


----
你说的每一句话,都将成为呈堂证供

[关闭][返回]