当前位置:首页 > 开发教程 > C++教程 >

jni试用资料

时间:2013-09-18 11:26 来源: 作者: 收藏

2345软件教程,为您打造全面的软件教程手册,无论是新奇小软件的操作还是专业软件的使用技巧,2345软件教程都会为您解疑释惑。

核心提示:在如下情况下,需要在本地方法中应用java对象的引用,就会用到类型之间的转换


编译HelloWorld类

1 public class HelloWorld {

2 public native void displayHelloWorld();

3

4 public native void printxx(String str);

5

6 static {

7 System.loadLibrary("hello");

8 // System.load("hello");

9 }

10

11 public static void main(String[] args) {

12 HelloWorld hw = new HelloWorld();

13 hw.displayHelloWorld();

14 for (int i = 0;; ++i) {

15 hw

16 .printxx("wo kaowo kaowo kaowo kaowo kaowo kaowo kaowo kaowo kaowo kaowo kao");

17 if (i % 1000 == 0) {

18 try {

19 Thread.sleep(10);

20 } catch (InterruptedException e) {

21 }

22 }

23 }

24 }

25 }

对编译完的class执行

javah HelloWorld

1 /* DO NOT EDIT THIS FILE - it is machine generated */

2 #include <jni.h>

3 /* Header for class HelloWorld */

4

5 #ifndef _Included_HelloWorld

6 #define _Included_HelloWorld

7 #ifdef __cplusplus

8 extern "C" {

9 #endif


10 /*

11 * Class: HelloWorld

12 * Method: displayHelloWorld

13 * Signature: ()V

14 */

15 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld

16 (JNIEnv *, jobject);

17

18 /*

19 * Class: HelloWorld

20 * Method: printxx

21 * Signature: (Ljava/lang/String;)V

22 */

23 JNIEXPORT void JNICALL Java_HelloWorld_printxx

24 (JNIEnv *, jobject, jstring);

25

26 #ifdef __cplusplus

27 }

28 #endif

29 #endif

30

编译

cl -I%java_home%include -I%java_home%includewin32 -LDHelloWorld.c -Fehello.dll

1 #include <jni.h>

2 #include "HelloWorld.h"

3 #include <stdio.h>

4 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)

5 {

6 printf("Hello world! ");

7 return;

8 }

9

10 JNIEXPORT void JNICALL Java_HelloWorld_printxx

11 (JNIEnv *env, jobject obj, jstring prompt){

12

13 const char *str = (*env)->GetStringUTFChars(env, prompt, 0);

14 printf("%s",prompt);


15 (*env)->ReleaseStringUTFChars(env, prompt, str);

16

17 return;

18 }

19

20

3.Java类型和本地类型对应

在如下情况下,需要在本地方法中应用java对象的引用,就会用到类型之间的转换:

1)java方法里面将参数传入本地方法;

2)在本地方法里面创建java对象;

3)在本地方法里面return结果给java程序。

分为如下两种情况:

Java原始类型

像booleans、integers、floats等从Java程序中传到本地方法中的原始类型可以直接使用,下面是java中的原始类型和本地方法中的类型的对应:

Java类型  本地类型  字节(bit)

boolean   jboolean   8, unsigned

byte    jbyte    8

char    jchar    16, unsigned

short    jshort    16

int     jint     32

long    jlong    64

float    jfloat    32

double   jdouble   64

void    void     n/a

也就是说如果我在方法中传进去了一个boolean的参数的话,那么我在本地方法中就有jboolean类型与之对应。同理,如果在本地方法中return一个jint的话,那么在java中就返回一个int类型。 中国网管论坛

Java对象

Java对象做为引用被传递到本地方法中,所有这些Java对象的引用都有一个共同的父类型jobject(相当于java中的Object类是所有类的父类一样)。下面是JNI实现的一些jobject的子类:

4.本地方法中访问java程序中的内容

1)访问String对象:



上一篇:调用PHP
下一篇:MFC窗体过程

C++教程阅读排行

最新文章