- 定義java測試類
package com.example;
public class StringDeal {
public native static String resolveString(String str);
static{
System.loadLibrary("StringDeal");
}
public static void main(String[] args) {
System.out.println(resolveString(""));
}
}
- 實現(xiàn)c代碼
/*
* Class: com_example_StringDeal
* Method: resolveString
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT jstring JNICALL Java_com_example_StringDeal_resolveString
(JNIEnv *env, jclass jcls, jstring jstr){
char *c_str = "我是來自c的字符串,現(xiàn)在要返回給java端使用";
printf("%s \n", c_str);
//查找class
jclass jclz = (*env)->FindClass(env, "java/lang/String");
if (jclz == NULL)
{
return NULL;
}
//獲取構(gòu)造函數(shù)
jmethodID jmid = (*env)->GetMethodID(env, jclz, "<init>", "([BLjava/lang/String;)V");
if (jmid == NULL)
{
return NULL;
}
//獲取字符串長度
jsize size = strlen(c_str);
//構(gòu)建一個新的jbyteArray
jbyteArray jbytes =(*env)->NewByteArray(env, size);
//將c_str的值賦給jbytes
(*env)->SetByteArrayRegion(env, jbytes, 0, size, c_str);
//構(gòu)建字符編碼
jstring js = (*env)->NewStringUTF(env, "GB2312");
//創(chuàng)建一個String對象 通過構(gòu)造函數(shù)String(byte [] bytes ,String charset);
return (*env)->NewObject(env, jclz, jmid, jbytes, js);;
}

運(yùn)行結(jié)果.png