Вызов функции экспорта JNK

Я вижу пример в вики, подобный этому:

Defination:

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(....)

какой параметр должен быть в параметре печати при вызове?

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;
 }

licensed under cc by-sa 3.0 with attribution.