JNI将参数传递给c ++的方法

use*_*340 8 c++ java java-native-interface

我有一个c ++文件myCppTest.cpp,它有方法

int myFunction(int argv, char **argc) {
}

和myClass.java中的Java本机方法

public native int myFunction (int argv, char[][] argc);

使用javah -jni myClass生成头文件后,我有头

JNIEXPORT jint JNICALL Java_JPTokenizer_init
  (JNIEnv *, jobject, jint, jobjectArray);

在我的myClass.cpp中,我定义了

JNIEXPORT jint JNICALL Java_JPTokenizer_init
  (JNIEnv *env, jobject obj, jint argv, jobjectArray argc) {
        //need to call int myFunction(int argv, char **argc) in myCppTest.cpp 
}

我怎么能将参数"jint argv,jobjectArray argc"传递给"int argv,char**argc",谢谢.

编辑:

我认为我犯了一个错误

myClass.java中的Java本机方法应该是

public native int init (int argv, char[][] argc);

所以有

JNIEXPORT jint JNICALL Java_myClass_init
  (JNIEnv *, jobject, jint, jobjectArray);

在javah之后生成.在myClass.cpp中,我有

JNIEXPORT jint JNICALL Java_myClass_init
  (JNIEnv *env, jobject obj, jint argv, jobjectArray argc) {
        //need to call int myFunction(int argv, char **argc) in myCppTest.cpp 
}

Ton*_*ony 2

Java 对象和 C++ 原语之间没有直接映射,因此您必须转换 Java 运行时环境传递的参数,然后调用您的函数。

Java 将调用Java_JPTokenizer_init——这是您执行转换并调用“普通旧”C++ 函数的地方。

要转换字符串数组,您首先需要访问该数组,然后访问各个字符串。

  • 我知道这已经很旧了,但是这些链接都不起作用。最好将所需代码的片段与链接一起放置(以防链接中断)。 (4认同)