My native function accepts char ** as argument . Will anybody help me how should I pass it using JNI.
my native function protocol - long processInput(const char* str1 , char ** output);
Thanks
My native function accepts char ** as argument . Will anybody help me how should I pass it using JNI.
my native function protocol - long processInput(const char* str1 , char ** output);
Thanks
这不是一个完整的答案(还),但评论太长了。
首先在 Java 中编写本机函数声明,使其自然地适合 Java。也许其中之一是合适的:
static native String processInput(String input);
static native byte[] processInput(byte[] input);
然后,为了包装函数,你必须知道:
char
参数表示字符串,那么参数是什么
output
不相关,在这种情况下,包装器应该抛出 Java 异常还是返回null
字符串、null
数组或零长度数组?您不能真正直接执行此操作,但您也不能轻松地使用 JNI 调用任意函数名称 - 因此您需要一个简单的本机包装方法。从 Android ndk 分发示例/目录中的 hello-jni 示例开始,按原样构建它以确保一切正常,然后将其更改为如下所示:
long processInput(const char* str1 , char ** output);
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
//return (*env)->NewStringUTF(env, "Hello from JNI !");
char *outputstr;
processInput("some input", &outputstr);
return (*env)->NewStringUTF(env, outputstr);
}
您可能还想添加错误检查,可能从 jni 获取输入字符串等。