Вызов функции экспорта 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.