JNK导出函数调用

时间:2013-12-14 05:39:07

标签: java java-native-interface

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

调用时打印参数需要什么参数?

1 个答案:

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