java - 在 NDK 中调用 java 代码不起作用

标签 java android c++ c android-ndk

我需要调用java方法。

Projekt.cpp:
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)I");
int vysledek = env->CallIntMethod(cls, mid, nahodne_cislo, d, n);


Main.java
public Integer Vypocet(int a, int b, int c)
    {
...........other code......
...........................
         return vysl;   
    }

我不知道现在呢? :(

LogCat 写入错误:0xdeadd00d 处的致命信号 11 (SIGSEGV)

最佳答案

在您的 Java 代码中,您声明了一个返回类型为 Integer 的方法(这是一个类,全名为 java.lang.Integer)。

但是随后在您的 C++ 代码中您寻找一个带有签名 (III)I 的方法,这意味着三个 int 参数并返回一个 int 值(value)。之后您使用 CallIntMethod,它还需要一个返回 int 返回类型的方法。

您可以通过将 java 代码更改为:

来解决您的问题
public int Vypocet(int a, int b, int c) {
    //  your code 
    return vysl;   
}

另一种解决方案是更改 C++ 代码以反射(reflect) Integer 返回类型,如下所示:

// call your java method
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)Ljava/lang/Integer;");
jobject intObj = env->CallIntMethod(cls, mid, nahodne_cislo, d, n);

// call the Integer.getValue() to get a native int value
jclass integercls = env->GetObjectClass(intObj);
jmethodID getVal = env->GetMethodID(cls, "intValue", "()I");
int value = jenv->CallIntMethod(integervalue, getVal);

关于java - 在 NDK 中调用 java 代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23677931/

相关文章:

android - 截取当前屏幕

c++ - Friend 类不工作 C++,声明 'class T' 阴影模板参数

java - 分段解密文件

java - 我可以在 View jsp中使用文件夹名称吗

android - 尝试了解 android 支持库 23.2.1 中 BottomSheet 的行为

c++ - 在 C++ 中加载数据的最快方法

c++ - 使用boost::upgrade_lock和shared_lock实现读/写线程安全

java - 服务器端从另一个客户端获取 GET 请求时推送到客户端

java - 在 Java 中在运行时访问方法调用参数

android - 将 @Component.Builder 与构造函数参数一起使用