您的位置:首页 > 其它

jni中如何传递字符串或者数组

2015-08-07 16:32 363 查看
1. 传递字符串

public class Sample1

{

public native String stringMethod(String text);

public static void main(String[] args)

{

System.loadLibrary("Sample1");

Sample1 sample = new Sample1();

String text = sample.stringMethod("Thinking In Java");

System.out.println("stringMethod: " + text);

}

}

#include

#include

JNIEXPORT jstring JNICALL Java_Sample1_stringMethod(JNIEnv *env, jobject obj, jstring string)

{

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

char cap[128];

strcpy(cap, str);

(*env)->ReleaseStringUTFChars(env, string, str);

int i=0;

for(i=0;i

*(cap+i)=(char)toupper(*(cap+i));

return (*env)->NewStringUTF(env, cap);

}

2. 传递整型数组

public class Sample2

{

public native int[] intMethod();

public static void main(String[] args)

{

System.loadLibrary("Sample2");

Sample2 sample=new Sample2();

int[] nums=sample.intMethod();

for(int i=0;i

System.out.println(nums[i]);

}

}

#include

JNIEXPORT jintArray JNICALL Java_Sample2_intMethod(JNIEnv *env, jobject obj)

{

int i = 1;

jintArray array;//定义数组对象

array = (*env)-> NewIntArray(env, 10);

for(; i<= 10; i++)

(*env)->SetIntArrayRegion(env, array, i-1, 1, &i);

int len = (*env)->GetArrayLength(env, array);

jint* elems = (*env)-> GetIntArrayElements(env, array, 0);

for(i=0; i<len; i++)

printf("ELEMENT %d IS %d\n", i, elems[i]);

return array;

}

3. 传递字符串数组

public class Sample3

{

public native String[] stringMethod(String text);

public static void main(String[] args)

throws java.io.UnsupportedEncodingException

{

System.loadLibrary("Sample3");

Sample3 sample = new Sample3();

String[] texts = sample.stringMethod("java编程思想");

for(int i=0;i<texts.length;i++)

{

texts[i]=new String(texts[i].getBytes("ISO8859-1"),"GBK");

System.out.print( texts[i] );

}

System.out.println();

}

}

#include <Sample3.h>

#include <string.h>

#include <stdlib.h>

#define ARRAY_LENGTH 5

JNIEXPORT jobjectArray JNICALL Java_Sample3_stringMethod

(JNIEnv *env, jobject obj, jstring string)

{

jclass objClass = (*env)->FindClass(env, "java/lang/String");

jobjectArray texts= (*env)->NewObjectArray(env,

(jsize)ARRAY_LENGTH, objClass, 0);

jstring jstr;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: