我在wiki中看到与此类似的示例:
认定中:
JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
调用java:
class HelloWorld
{
private native void print();
public static void main(String[] args)
{
new HelloWorld().print();
}
static{
System.loadLibrary("HelloWorld");
}
}
但是当我想将jstring传递给函数时。
需要对定义和通话进行哪些修改?
与此类似:
Java_HelloWorld_print(JNIEnv * env,jobject obj,jstring path)
和
private native void print(....)
调用时打印参数需要什么参数?
答案 0 :(得分:1)
Java部分很简单:
private native void print(String path);
C部分,而不是:
JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *jenv, jobject obj, jstring path)
{
char* arg2 = 0;
if (path) {
arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, path, 0);
if (!arg2) return;
}
printf("%s\n", arg2);
if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, path, (const char *)arg2);
return;
}