安卓C+上的Qt+;对于void或primitive返回类型,与SIGSEGV的互操作性失败 我尝试在Android C++上获得Qt5.2.1到java互操作。 我有一段C++代码,使用QANDROIDJNIObjt调用java类上的静态方法。< /P>

安卓C+上的Qt+;对于void或primitive返回类型,与SIGSEGV的互操作性失败 我尝试在Android C++上获得Qt5.2.1到java互操作。 我有一段C++代码,使用QANDROIDJNIObjt调用java类上的静态方法。< /P>,java,android,c++,java-native-interface,qt5,Java,Android,C++,Java Native Interface,Qt5,这是可行的(先是C++然后是Java): 但是,我有一个方法具有void返回类型,因此: QAndroidJniObject::callStaticObjectMethod( "org/example/AndroidTest", "doSomething", "()V" ); public static void doSomething() { } 方法签名是()V,我理解这是指一个不带参数且返回类型为void的方法,因此它应该与我的Java方法相匹配 问题是在执行时

这是可行的(先是C++然后是Java):

但是,我有一个方法具有
void
返回类型,因此:

QAndroidJniObject::callStaticObjectMethod(
    "org/example/AndroidTest",
    "doSomething",
    "()V"
);

public static void doSomething() {
}
方法签名是
()V
,我理解这是指一个不带参数且返回类型为
void
的方法,因此它应该与我的Java方法相匹配

问题是在执行时,当
callStaticObjectMethod
调用返回时,这会导致libc中出现SIGSEGV


<如果我添加调试跟踪,我看到java类正确地进入和退出,SIGSEGV在C++代码返回时发生。事实上,如果我更改方法签名以返回int,例如()I,我仍然会看到一个SIGSEGV,因此我非常确定问题与返回类型有关,但我无法理解它失败的原因。

如果调用返回void或某个基元类型的Java方法,则应该改用callStaticMethod。此外,如果Java方法不接受任何参数,则可以省略签名,例如:

QAndroidJniObject::callStaticMethod<void>("org/example/AndroidTest", "doSomething");

public static void doSomething()
{
}

jint value = QAndroidJniObject::callStaticMethod<jint>("org/example/AndroidTest", "doSomethingElse");

public static int doSomethingElse()
{
    return 1;
}
callStaticMethod(“org/example/AndroidTest”,“doSomething”); 公共静态无效剂量测定法() { } jint value=QAndroidJniObject::callStaticMethod(“org/example/AndroidTest”、“doSomethingElse”); 公共静态int doSomethingElse() { 返回1; }
QAndroidJniObject::callStaticMethod<void>("org/example/AndroidTest", "doSomething");

public static void doSomething()
{
}

jint value = QAndroidJniObject::callStaticMethod<jint>("org/example/AndroidTest", "doSomethingElse");

public static int doSomethingElse()
{
    return 1;
}