WEB开发网
开发学院软件开发VC 例解用 VC++ 6.0 实现 JNI 阅读

例解用 VC++ 6.0 实现 JNI

 2007-03-23 21:30:24 来源:WEB开发网   
核心提示: (2)中指明了你必须用本地代码实现的方法,Step 2:提示符下使用命令javac -d . WinMsgBox.java编译Step 1编写的java文件,例解用 VC++ 6.0 实现 JNI(2),此时会在当前目录下建立一个eduetcomjni目录结构,并且一个WinMsgBox.

(2)中指明了你必须用本地代码实现的方法。

Step 2:提示符下使用命令javac -d . WinMsgBox.java编译Step 1编写的java文件。

此时会在当前目录下建立一个edu etcomjni目录结构,并且一个WinMsgBox.class文件存在其中。

Step 3:提示符下使用命令javah -jni edu.netcom.jni.WinMsgBox,此时会在当前目录下产生一个edu_netcom_jni_WinMsgBox.h文件,注意这个文件名是由(包名+类名)组成,中间用(_)隔开。此文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>            // (1)
/* Header for class edu_netcom_jni_WinMsgBox */
#ifndef _Included_edu_netcom_jni_WinMsgBox
#define _Included_edu_netcom_jni_WinMsgBox
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:   edu_netcom_jni_WinMsgBox
* Method:  showMsgBox
* Signature: (Ljava/lang/String;)V    // (2)
*/
JNIEXPORT void JNICALL Java_edu_netcom_jni_WinMsgBox_showMsgBox
 (JNIEnv *, jobject, jstring);      // (3)
#ifdef __cplusplus
}
#endif
#endif

(1)包含的jni.h存在于JDK安装目录下的include下面。

(2)(Ljava/lang/String;)V这是函数的标记符,当从本地方法端访问Java端的方法时,会用到这个标记符。JNI中为每种数据类型也定义了标记符,标记符的规则请查看JNI标准文档。

(3)在WinMsgBox.java中本地方法void showMsgBox(String str);的定义,被映射为JNIEXPORT void JNICALL Java_edu_netcom_jni_WinMsgBox_showMsgBox(JNIEnv *, jobject, jstring); 其中函数名的映射规则是(Java_包名_类名_方法名),如果存在重载的方法,则在后面还会增加每个参数的标记符。每一个方法映射到本地C函数后都会增加两个参数:JNIEnv *和jobject,关于这两个参数的用法将在后面阐述。另外,所有Java中的数据类型都会按一定规则进行映射为本地数据类型,这些数据类型都是在jni.h中定义的。下面分别按照基本数据类型,和对象类型列出。

Tags:解用 VC 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接