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
}
Java 对象和 C++ 原语之间没有直接映射,因此您必须转换 Java 运行时环境传递的参数,然后调用您的函数。
Java 将调用Java_JPTokenizer_init——这是您执行转换并调用“普通旧”C++ 函数的地方。
要转换字符串数组,您首先需要访问该数组,然后访问各个字符串。
对于数组访问,请参阅GetObjectArrayElement()。
对于字符串访问,请参阅GetStringUTFChars()。
| 归档时间: |
|
| 查看次数: |
12865 次 |
| 最近记录: |