JNI - PASS ARGUMENT. string

来源:互联网 发布:java陈芸 编辑:程序博客网 时间:2024/06/06 01:10

.c file:

#include <stdio.h>#include <jni.h>#include <stdlib.h>#include <string.h>#include "Prompt.h"JNIEXPORT jstring JNICALL Java_Prompt_getLine  (JNIEnv *env, jobject this, jstring prompt){char buf[128];const jbyte *str;str = (*env)->GetStringUTFChars(env, prompt, NULL);//There are two methods to get the length of a String.//1. strlen(jbyte cstring)//2. (*env)->GetStringUTFLength(env, prompt)printf("The length of String is (by str.strlen) : %d\n",(int)strlen(str));printf("The length of String is (by GetStringUTFLength) : %d\n",(int)(*env)->GetStringUTFLength(env, prompt));if (str == NULL){return NULL;}printf("%s", str);(*env)->ReleaseStringUTFChars(env, prompt, str);scanf("%s" , buf);return (*env)->NewStringUTF(env,buf);}

.java file

class Prompt{//native method that prints a prompt and reads a lineprivate native String getLine(String prompt);public static void main(String args[]){Prompt p = new Prompt();String input = p.getLine("Type a line : ");System.out.println("User typed : " + input);}static {System.loadLibrary("Prompt");}}


How to pass a string to Native c:

1. use jstring as a parameter.
2. convert it to c:
const jbyte *str;str = (*env)->GetStringUTFChars(env, prompt, NULL);

Two ways to get the length of String

1.  strlen(jbyte* str)
2.  
(*env)->GetStringUTFLength(env, prompt)

How to construct a new String

<span style="white-space:pre"></span>(*env)->NewStringUTF(env,buf);


Other methods to get a String

GetStringCritical

jstring jstr1;jchar *s1;s1 = (*env)->GetStringCritical(env,jstr1);/*      use s1.*/(*env)->ReleaseStringCritical(env,jstr1,s1);

GetStringUTFRegion

jstring promptchar outbuf[128];int len = (*env)->GetStringLength(env, prompt);(*env)->GetStringUTFRegion(env,prompt,0,len,outbuf);




0 0