当前位置 : 主页 > 网络编程 > 其它编程 >

JNI通过形参返回String的方法

来源:互联网 收集:自由互联 发布时间:2023-07-02
标题虽说是String但实际使用了StringBuffer很简单往下看吧直接cp过去就可以用了。publicclassDecodec{publics 标题虽说是String但实际使用了StringBuffer 很简单往下看吧直接cp过去就可以用了。 publ
标题虽说是String但实际使用了StringBuffer很简单往下看吧直接cp过去就可以用了。publicclassDecodec{publics

标题虽说是String但实际使用了StringBuffer

很简单往下看吧直接cp过去就可以用了。

public class Decodec {

public static native int test(String inPut, StringBuffer outPut);

static {

System.loadLibrary("decodec");

}

}

#include

#include

/*

* Class:     jp_ac_jaist_myjnitest_Codec

* Method:    test

* Signature: (Ljava/lang/String;Ljava/lang/StringBuffer;)I

*/

JNIEXPORT jint JNICALL Java_jp_ac_jaist_myjnitest_Codec_test

(JNIEnv* env, jclass, jstring inputStrJstr, jobject outputJobj)

{

const char* pInputStr env->GetStringUTFChars(inputStrJstr, JNI_FALSE);

if (pInputStr NULL)

{

return -1;

}

__android_log_print(ANDROID_LOG_DEBUG, "Test", "pInputStr:%s", pInputStr);

jclass outputJcls env->GetObjectClass(outputJobj);

if (outputJcls NULL)

{

__android_log_print(ANDROID_LOG_DEBUG, "Cosmo Test", "Unable to find outputJcls");

return -1;

}

jfieldID valueJfId env->GetFieldID(outputJcls, "value", "[C");

if (valueJfId NULL)

{

__android_log_print(ANDROID_LOG_DEBUG, "Test", "Unable to get class StringBuffer.values jfieldID");

return -1;

}

jmethodID appendJmId env->GetMethodID(outputJcls, "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");

if (appendJmId NULL)

{

__android_log_print(ANDROID_LOG_DEBUG, "Test", "Unable to find appendJmId");

}

char name[200];

memset(name, 0x00, sizeof(name));

strncpy(name, "Cosmo Wang", sizeof(name) - 1);

jstring _jstring env->NewStringUTF(name);

env->CallObjectMethod(outPut, appendJmId, _jstring);

env->ReleaseStringUTFChars(inputStrJstr, pInputStr);

return 0;

}

使用方法

StringBuffer output new StringBuffer();

Codec.test("hello", output);

Log.e("Test", "output:" output);

上一篇:php原生session小知识点
下一篇:没有了
网友评论