发信人: 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文档。 
   
 
  ---- 你说的每一句话,都将成为呈堂证供 | 
 
 
 |