我的原生函数接受char **作为参数。有人会帮助我如何使用JNI传递它。
我的本机函数协议 - long processInput(const char * str1,char ** output);
由于
答案 0 :(得分:1)
你不能直接这样做,但你不能轻易地用JNI调用任意函数名 - 所以你需要一个简单的本机包装器方法。从Android ndk distribution samples /目录中的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获取输入字符串等
答案 1 :(得分:1)
这还不是一个完整的答案,但是评论太长了。
首先在Java中编写一个本机函数声明,使其自然适合Java。也许其中一个是合适的:
static native String processInput(String input);
static native byte[] processInput(byte[] input);
然后,为了包装该函数,您必须知道:
char
参数代表字符串,那么它们是什么
output
不相关,在这种情况下,包装器应抛出Java异常或返回null
字符串,null
数组还是零长度数组?